Guest User

Untitled

a guest
Jun 24th, 2017
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. //author @ Ayush Aggarwal
  2. // Let's Do this shit.
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5. //typedef long int;
  6. int freq[1000006];
  7. int a[300003];
  8. int block_size;
  9. struct query
  10. {
  11.     int L,R,idx;
  12. };
  13. query q[200002];
  14. bool compare(query q1,query q2)
  15. {
  16.     int L1 = q1.L/block_size;
  17.     int L2 = q2.L/block_size;
  18.     if(L1!=L2)
  19.         return L1 < L2;
  20.     return q1.R < q1.R;
  21. }
  22. int main()
  23. {  
  24.     ios::sync_with_stdio(false);
  25.     cin.tie(NULL);
  26.     //memset(freq,0,sizeof(freq));
  27.     int N,L1,R1;
  28.     scanf("%d",&N);
  29.     for(int i=0;i<N;i++)   
  30.         scanf("%d",&a[i]);
  31.     block_size = (int)sqrt(N);
  32.     int Q;
  33.     cin>>Q;
  34.     //query q[Q];
  35.     for(int i=0;i<Q;i++)
  36.     {
  37.         scanf("%d%d",&L1,&R1);
  38.         L1--;
  39.         R1--;
  40.         q[i].L = L1;
  41.         q[i].R = R1;
  42.         q[i].idx = i;
  43.     }
  44.     sort(q,q+Q,compare);
  45.     int curr_L=0,curr_R=-1;
  46.     int count=0;
  47.     int sum[Q];
  48.     for(int i=0;i<Q;i++)
  49.     {
  50.          L1 = q[i].L;
  51.          R1 = q[i].R;
  52.         int prev=0;
  53.         while(curr_L < L1)
  54.         {
  55.             freq[a[curr_L]]--;
  56.             if(freq[a[curr_L]]==0)
  57.                 count--;
  58.             curr_L++;  
  59.         }
  60.         while(curr_L > L1)
  61.         {
  62.             curr_L--;
  63.             freq[a[curr_L]]++;
  64.             if(freq[a[curr_L]]==1)
  65.                 count++;   
  66.         }
  67.         while(curr_R < R1)
  68.         {
  69.             curr_R++;
  70.             freq[a[curr_R]]++;
  71.             if(freq[a[curr_R]]==1)
  72.                 count++;
  73.         }
  74.         while(curr_R > R1)
  75.         {
  76.             freq[a[curr_R]]--;
  77.             if(freq[a[curr_R]]==0)
  78.                 count--;
  79.             curr_R--;  
  80.         }
  81.         //cout<<freq[1]<<" "<<freq[2]<<" "<<freq[3]<<endl;
  82.         sum[q[i].idx] = count;
  83.     }
  84.     for(int i=0;i<Q;i++)
  85.         printf("%d\n",sum[i]);
  86.     return 0;
  87. }
Add Comment
Please, Sign In to add comment