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

CodeForces 86D Powerful array(莫队算法)

时间:2016-03-07 23:59:10      阅读:472      评论:0      收藏:0      [点我收藏+]

标签:

BZOJ2038差不多。。复习一下。

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<algorithm>
 4 using namespace std;
 5 int block;
 6 struct Query{
 7     int i,l,r;
 8     bool operator<(const Query &q)const{
 9         if(l/block==q.l/block) return r<q.r;
10         return l/block<q.l/block;
11     }
12 }query[220000];
13 int cnt[1111111];
14 long long res,ans[220000];
15 void insert(long long x){
16     res-=x*cnt[x]*cnt[x];
17     ++cnt[x];
18     res+=x*cnt[x]*cnt[x];
19 }
20 void remove(long long x){
21     res-=x*cnt[x]*cnt[x];
22     --cnt[x];
23     res+=x*cnt[x]*cnt[x];
24 }
25 int a[220000];
26 int main(){
27     int n,t;
28     scanf("%d%d",&n,&t);
29     for(int i=1; i<=n; ++i) scanf("%d",a+i);
30     block=(int)sqrt(n);
31     for(int i=0; i<t; ++i){
32         query[i].i=i;
33         scanf("%d%d",&query[i].l,&query[i].r);
34     }
35     sort(query,query+t);
36     int l=1,r=1; cnt[a[1]]=1; res=a[1];
37     for(int i=0; i<t; ++i){
38         while(l<query[i].l) remove(a[l++]);
39         while(l>query[i].l) insert(a[--l]);
40         while(r>query[i].r) remove(a[r--]);
41         while(r<query[i].r) insert(a[++r]);
42         ans[query[i].i]=res;
43     }
44     for(int i=0; i<t; ++i){
45         printf("%I64d\n",ans[i]);
46     }
47     return 0;
48 }

 

CodeForces 86D Powerful array(莫队算法)

标签:

原文地址:http://www.cnblogs.com/WABoss/p/5252330.html

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