Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. /**In the name of Allah, the Most Merciful, the Most Merciful.**/
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define INF 9223372036854775806
  5. #define pb push_back
  6. #define mp make_pair
  7.  
  8. struct ff{
  9.     int l,r,idx;
  10.     ff(int a,int b,int c){
  11.         l=a; r=b; idx=c;
  12.     }
  13. };
  14. vector<ff> v;
  15. int K;
  16. bool cmp(ff a,ff b){
  17.     int b1=a.l/K; int b2=b.l/K;
  18.     if(b1==b2) return a.r<b.r;
  19.     return b1<b2;
  20. }
  21. int a[100005];
  22. int sum=0;
  23. unordered_map<int,int> cnt;
  24. void add(int x){
  25.     cnt[x]++;
  26.     if(cnt[x]==1) sum++;
  27. }
  28. void del(int x){
  29.     cnt[x]--;
  30.     if(cnt[x]==0) sum--;
  31. }
  32. int main()
  33. {
  34.     //freopen("C:/Users/Faizul/OneDrive/Solving/input.txt","r",stdin);
  35.     //freopen("C:/Users/Faizul/OneDrive/Solving/output.txt","w",stdout);
  36.  
  37.     int t,n,m,x,y,w,k,q,p,cs;
  38.     scanf("%d",&n);
  39.     K=sqrt(n);
  40.     for(int i=0;i<n;i++){
  41.         scanf("%d",&a[i]);
  42.     }
  43.     scanf("%d",&m);
  44.     //getchar();
  45.     for(int i=0;i<m;i++){
  46.         scanf("%d %d",&x,&y);
  47.         //cout<<c<<" "<<x<<" "<<y<<endl;
  48.         v.pb(ff(x-1,y-1,i));
  49.     }
  50.     sort(v.begin(),v.end(),cmp);
  51.  
  52.     //for(auto it:v) cout<<it.id<<" "<<it.l<<" "<<it.r<<" "<<it.idx<<endl;
  53.  
  54.     int l=0,r=-1;
  55.     int ans[m]={0};
  56.     for(auto it:v){
  57.         //cout<<it.l<<" "<<it.r<<" "<<it.idx<<endl;
  58.         while(r<it.r){
  59.             r++;
  60.             add(a[r]);
  61.         }
  62.         while(r>it.r){
  63.             del(a[r]);
  64.             r--;
  65.         }
  66.         while(l<it.l){
  67.             del(a[l]);
  68.             l++;
  69.         }
  70.         while(l>it.l){
  71.             l--;
  72.             add(a[l]);
  73.         }
  74.         ans[it.idx]=sum;
  75.     }
  76.  
  77.     for(int i=0;i<m;i++){
  78.         cout<<ans[i]<<endl;
  79.     }
  80.  
  81.     return 0;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement