codeforces 86 D Powerful array
2016-07-07 07:47
369 查看
题目链接
定义Si是i在数组中出现的次数。
定义一个数组的价值是∑Si∗Si∗i.
每次询问[L,R]的价值。
记录每个元素出现的次数cnti
每次加入一个元素时,答案就加上cnti+12−cnti2。
每次删除一个元素时,答案就减去cnti2−cnti−12。
好了。
这题貌似有点卡常,我一开始为了方便,把cnt开成long long,结果就TLE了。
还是要在乘法时强制转化。
题目大意
给定一个有n个元素的序列,有m个询问。定义Si是i在数组中出现的次数。
定义一个数组的价值是∑Si∗Si∗i.
每次询问[L,R]的价值。
题解
似乎就是莫队的模板题啊。记录每个元素出现的次数cnti
每次加入一个元素时,答案就加上cnti+12−cnti2。
每次删除一个元素时,答案就减去cnti2−cnti−12。
好了。
这题貌似有点卡常,我一开始为了方便,把cnt开成long long,结果就TLE了。
还是要在乘法时强制转化。
#include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int M=200005; typedef long long ll; struct Query{ int L,R,id; }q[M]; int s,col[M]; ll ans[M]; int cnt[M*10]; bool cmp(Query a,Query b){ if(a.L/s==b.L/s) return a.R<b.R; return a.L/s<b.L/s; } inline void rd(int&res){ res=0;char c; while(c=getchar(),c<48); do res=res*10+(c^48); while(c=getchar(),c>47); } void print(ll x){ if(!x) return; print(x/10); putchar(x%10^48); } inline void sc(ll x){ if(x==0) putchar('0'); else print(x); putchar('\n'); } int main(){ int n,m; scanf("%d%d",&n,&m); s=(int)sqrt(n); for(int i=1;i<=n;i++) rd(col[i]); for(int i=0;i<m;i++){ int a,b; rd(a);rd(b); q[i]=(Query){a,b,i}; } sort(q,q+m,cmp); int L=1,R=0; ll res=0; for(int i=0;i<m;i++){ while(R<q[i].R){ R++; res+=(ll)col[R]*(cnt[col[R]]+1)*(cnt[col[R]]+1)-(ll)col[R]*cnt[col[R]]*cnt[col[R]]; cnt[col[R]]++; } while(L<q[i].L){ res-=(ll)col[L]*cnt[col[L]]*cnt[col[L]]-(ll)col[L]*(cnt[col[L]]-1)*(cnt[col[L]]-1); cnt[col[L]]--; L++; } while(R>q[i].R){ res-=(ll)col[R]*cnt[col[R]]*cnt[col[R]]-(ll)col[R]*(cnt[col[R]]-1)*(cnt[col[R]]-1); cnt[col[R]]--; R--; } while(L>q[i].L){ L--; res+=(ll)col[L]*(cnt[col[L]]+1)*(cnt[col[L]]+1)-(ll)col[L]*cnt[col[L]]*cnt[col[L]]; cnt[col[L]]++; } ans[q[i].id]=res; } for(int i=0;i<m;i++) sc(ans[i]); return 0; }
相关文章推荐
- Codeforces Round #197 (Div. 2)
- Codeforces Round #198 (Div. 1)
- Codeforces 405E Codeforces Round #238 (Div. 2)E
- Codeforces 407C Codeforces Round #239 (Div. 1)C
- CodeForces 449A - Jzzhu and Chocolate
- CodeForces 449 B. Jzzhu and Cities
- codeforces 618C. Constellation
- Codeforces Round #349 (Div. 2) - C
- Codeforces Round #265 (Div. 2)
- Codeforces #310 div2 C. Case of Matryoshkas
- 状态压缩DP codeforces 244 Problem C. The Brand New Function 和 codeforces 165 E. Compatible Numbers
- codeforces 16 Problem E fish
- Codeforces Round332 部分题解
- CodeForces 603A_Alternative Thinking (DP)
- CodeForces 602B_Approximating a Constant Range_DP
- Codeforces round #247 for Div. 2
- Codeforces Round #246 (Div. 2)
- Codeforces #264(div 2)D.Gargari and Permutations
- Codeforces Round #236 (Div. 2)------A,B
- codeforces 257 div2 B