BZOJ 3781 莫队算法
2016-12-27 08:33
405 查看
一道莫队算法裸题,其中分块的步骤是和Po神学的,将2^7分为一块
#include<cstdio> #include<cstdlib> #include<cmath> #include<ctime> #include<cstring> #include<string> #include<iostream> #include<iomanip> #include<algorithm> using namespace std; struct query { int l,r,pos; bool operator <(query b) const { if((l>>8) != (b.l>>8)) return l<b.l; return r<b.r; } }q[50050]; long long sum[50050]; long long now; long long ans[50050]; int a[50050]; void update(int x,int y) { now-=sum[x]*sum[x]; sum[x]+=y; now+=sum[x]*sum[x]; } int main() { int n,m,k; scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d%d",&q[i].l,&q[i].r),q[i].pos=i; sort(q+1,q+1+m); int l=1,r=0; for(int i=1;i<=m;i++) { while(r<q[i].r) update(a[++r],1); while(r>q[i].r) update(a[r--],-1); while(l<q[i].l) update(a[l++],-1); while(l>q[i].l) update(a[--l],1); ans[q[i].pos]=now; } for(int i=1;i<=m;i++) printf("%lld\n",ans[i]); return 0; }
相关文章推荐
- 【BZOJ】3781: 小B的询问(莫队算法)
- BZOJ 3781: 小B的询问 莫队算法
- BZOJ - 3781 小B的询问 莫队算法
- bzoj 3781: 小B的询问 莫队算法+分块
- bzoj 3781 小B的询问(莫队算法)
- 【莫队算法】bzoj3781 小B的询问
- 【bzoj3781】小B的询问 莫队算法
- 【P2709】【BZOJ3781】 小B的询问 莫队算法
- 【BZOJ3781】小B的询问【莫队算法】
- 【模板】BZOJ 3781: 小B的询问 莫队算法
- BZOJ3781【莫队算法】
- 【BZOJ3781、2038】莫队算法2水题
- BZOJ 3781 小B的询问 序列莫队算法
- 【莫队算法】bzoj3289 Mato的文件管理
- BZOJ 3289 Mato的文件管理 莫队算法+树状数组
- BZOJ 3781 小B的询问 莫队
- BZOJ_3781_小B的询问_莫队
- BZOJ 3289 Mato的文件管理 莫队算法+树状数组
- 【BZOJ2120】数颜色-带修改莫队算法
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)|分块|莫队算法