码迷,mamicode.com
首页 > 编程语言 > 详细

【莫队算法】bzoj3781 小B的询问

时间:2014-11-28 17:53:55      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   sp   for   on   div   

莫队经典。 开个数组维护a[i]出现的次数。

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 using namespace std;
 5 int Num,CH[12],f,c;
 6 inline void R(int &x){
 7     c=0;f=1;
 8     for(;c<0||c>9;c=getchar())if(c==-)f=-1;
 9     for(x=0;c>=0&&c<=9;c=getchar())(x*=10)+=(c-0);
10     x*=f;
11 }
12 inline void P(int x){
13     if(x<10)putchar(x+0);
14     else{P(x/10);putchar(x%10+0);}
15 }
16 int ans,anss[50001];
17 int n,m,K,num[50001],a[50001],T[50001];
18 int sqr(const int &x){return x*x;}
19 struct ASK{int l,r,p;void Read(){R(l);R(r);}}Q[50001];
20 bool operator < (const ASK &a,const ASK &b){return num[a.l]!=num[b.l] ? num[a.l]<num[b.l] : a.r<b.r;}
21 void makeblock()
22 {
23     int sz=sqrt(n),sum=1; if(!sz) sz=1;
24     for(;sum*sz<n;++sum)
25       {
26           int r=sum*sz;
27           for(int i=sz*(sum-1)+1;i<=r;++i) num[i]=sum;
28       }
29     for(int i=sz*(sum-1)+1;i<=n;++i) num[i]=sum;
30 }
31 int main()
32 {
33     R(n);R(m);R(K);makeblock();
34     for(int i=1;i<=n;++i) R(a[i]);
35     for(int i=1;i<=m;++i) {Q[i].Read(); Q[i].p=i;}
36     sort(Q+1,Q+m+1);
37     for(int i=Q[1].l;i<=Q[1].r;++i){ans-=sqr(T[a[i]]);ans+=sqr(++T[a[i]]);}
38     anss[Q[1].p]=ans;
39     for(int i=2;i<=m;++i)
40       {
41           if(Q[i].l<Q[i-1].l){for(int j=Q[i-1].l-1;j>=Q[i].l;--j){ans-=sqr(T[a[j]]);ans+=sqr(++T[a[j]]);}}
42           else{for(int j=Q[i-1].l;j<Q[i].l;++j){ans-=sqr(T[a[j]]);ans+=sqr(--T[a[j]]);}}
43           if(Q[i].r<Q[i-1].r){for(int j=Q[i-1].r;j>Q[i].r;--j){ans-=sqr(T[a[j]]);ans+=sqr(--T[a[j]]);}}
44           else{for(int j=Q[i-1].r+1;j<=Q[i].r;++j){ans-=sqr(T[a[j]]);ans+=sqr(++T[a[j]]);}}
45         anss[Q[i].p]=ans;
46       } for(int i=1;i<=m;++i) P(anss[i]),puts("");
47     return 0;
48 }

【莫队算法】bzoj3781 小B的询问

标签:style   blog   io   ar   color   sp   for   on   div   

原文地址:http://www.cnblogs.com/autsky-jadek/p/4128723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!