fork(2) download
  1. #include<bits/stdc++.h>
  2. #define MAXN 200010
  3. #define MAXX 1000010
  4. using namespace std;
  5. int block;
  6. long long arr[MAXN+1],freq[MAXX+1],sol[MAXN+1];
  7. struct query{
  8. int l,r,i;
  9. }qry[MAXN+1];
  10. bool comp(query q1,query q2){
  11. if(q1.l!=q2.l)
  12. return (q1.l/block)<(q2.l/block);
  13. return (q1.r/block)<(q2.r/block);
  14. }
  15. int main(){
  16. ios::sync_with_stdio(false);
  17. int n,t,l,r,lx,rx;
  18. long long x=0;
  19. cin>>n>>t;
  20. block=sqrt(n);
  21. for(int i=0;i<n;i++)
  22. cin>>arr[i];
  23. for(int i=0;i<t;i++){
  24. cin>>qry[i].l>>qry[i].r;
  25. qry[i].l--;
  26. qry[i].r--;
  27. qry[i].i=i;
  28. }
  29. sort(qry,qry+t,comp);
  30. for(int i=0;i<t;i++)
  31. cout<<qry[i].l<<" "<<qry[i].r<<"\n";
  32. l=0;
  33. r=-1;
  34. for(int i=0;i<t;i++){
  35. lx=qry[i].l;
  36. rx=qry[i].r;
  37. while(l>lx){
  38. l--;
  39. x+=(((2LL*freq[arr[l]])+1)*arr[l]);
  40. freq[arr[l]]++;
  41. }
  42. while(l<lx){
  43. x-=(((2LL*freq[arr[l]])-1)*arr[l]);
  44. freq[arr[l]]--;
  45. l++;
  46. }
  47. while(r<=rx){
  48. x+=(((2LL*freq[arr[r]])+1)*arr[r]);
  49. freq[arr[r]]++;
  50. r++;
  51. }
  52. while(r>(rx+1)){
  53. r--;
  54. x-=(((2LL*freq[arr[r]])-1)*arr[r]);
  55. freq[arr[r]]--;
  56. }
  57. sol[qry[i].i]=x;
  58. }
  59. for(int i=0;i<t;i++)
  60. cout<<sol[i]<<"\n";
  61. return 0;
  62. }
Success #stdin #stdout 0s 28520KB
stdin
20 8
1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
4 15
1 2
2 20
7 7
13 18
7 7
3 19
3 8
stdout
3 14
0 1
1 19
2 7
2 18
6 6
6 6
12 17
108
3
281
1
27
1
209
27