洛谷 P2709 小B的询问 莫队算法
2018-03-07 21:18
232 查看
题目描述
小B有一个序列,包含N个1~K之间的整数。他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。小B请你帮助他回答询问。
输入输出格式
输入格式:
第一行,三个整数N、M、K。
第二行,N个整数,表示小B的序列。
接下来的M行,每行两个整数L、R。
输出格式:
M行,每行一个整数,其中第i行的整数表示第i个询问的答案。
输入输出样例
输入样例#1:
6 4 3
1 3 2 1 1 3
1 4
2 6
3 5
5 6
输出样例#1:
6
9
5
2
说明
对于全部的数据,1<=N、M、K<=50000
分析:显然可以用莫队乱搞。
代码:
小B有一个序列,包含N个1~K之间的整数。他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。小B请你帮助他回答询问。
输入输出格式
输入格式:
第一行,三个整数N、M、K。
第二行,N个整数,表示小B的序列。
接下来的M行,每行两个整数L、R。
输出格式:
M行,每行一个整数,其中第i行的整数表示第i个询问的答案。
输入输出样例
输入样例#1:
6 4 3
1 3 2 1 1 3
1 4
2 6
3 5
5 6
输出样例#1:
6
9
5
2
说明
对于全部的数据,1<=N、M、K<=50000
分析:显然可以用莫队乱搞。
代码:
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> const int maxn=50005; using namespace std; struct node{ int id,l,r,ans; }q[maxn]; int a[maxn],sum[maxn],belong[maxn]; int n,m,i,k,block,l,r,ans; bool cmp(node x,node y) { if (belong[x.l]==belong[y.l]) return x.r<y.r; return x.l<y.l; } bool cmp1(node x,node y) { return x.id<y.id; } void updata(int x,int c) { if (c==1) { ans+=sum[a[x]]*2+1; sum[a[x]]++; } else { ans-=sum[a[x]]*2-1; sum[a[x]]--; } } int main() { scanf("%d%d%d",&n,&m,&k); for (i=1;i<=n;i++) { scanf("%d",&a[i]); } for (i=1;i<=m;i++) { scanf("%d%d",&q[i].l,&q[i].r); q[i].id=i; } block=trunc(sqrt(n)); for (i=1;i<=n;i++) belong[i]=(i-1)/block+1; sort(q+1,q+m+1,cmp); l=1; r=1; sum[a[1]]=1; ans=1; for (i=1;i<=m;i++) { for (r;r<q[i].r;r++) updata(r+1,1); for (r;r>q[i].r;r--) updata(r,0); for (l;l<q[i].l;l++) updata(l,0); for (l;l>q[i].l;l--) updata(l-1,1); q[i].ans=ans; } sort(q+1,q+1+m,cmp1); for (i=1;i<=m;i++) printf("%d\n",q[i].ans); }
相关文章推荐
- 【P2709】【BZOJ3781】 小B的询问 莫队算法
- 洛谷P2709 BZOJ 3781 小B的询问 (莫队)
- 洛谷 P2709 BZOJ 3781 小B的询问
- bzoj 3781: 小B的询问 莫队算法+分块
- 【洛谷P2709】小B的询问
- 莫队算法——解决序列上询问的利器 (2) 带修改的莫队
- 【BZOJ】3781: 小B的询问(莫队算法)
- 【莫队算法】bzoj3781 小B的询问
- 洛谷.2709.小B的询问(莫队)
- 洛谷 P2709 小B的询问
- 洛谷 P1972 [SDOI2009]HH的项链【莫队算法学习】
- P2709 小B的询问(莫队)
- 3781: 小B的询问 莫队算法
- HDU 5381 The sum of gcd 询问区间内所有子区间的GCD和 [莫队算法]
- 洛谷--------P2709 小B的询问
- bzoj 3781 小B的询问(莫队算法)
- 洛谷 P1972 [SDOI2009]HH的项链 主席树 or 莫队算法
- 洛谷 P1903 [国家集训队]数颜色 带修改的莫队算法
- 莫队算法——解决序列上询问的利器
- BZOJ 3781 小B的询问 序列莫队算法