Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef pair<int,int> pii;
- typedef pair<ll,ll> pll;
- typedef vector<pii> vpii;
- typedef unsigned long long llu;
- #define debug(x) cerr<<#x<<" "<<x<<endl;
- #define f first
- #define s second
- #define mp make_pair
- #define pb push_back
- int A[30000+10];
- int last_time_ki_position[1000000+10];
- int cou[30000+10];
- int query_ka_index[200000+10];
- int n,q,l,r,qcounter=1;
- pair<int,pii> Query[200000+10];
- void update(int position,int value)
- {
- while(position<=n+2)
- {
- cou[position]+=value;
- position+=((position)&(-position));
- }
- }
- int cum_sum(int index)
- { int sum=0;
- while(index>=1)
- {
- sum=sum+cou[index];
- index-=(index&(-index));
- }
- return sum;
- }
- int main()
- {
- scanf("%d",&n);
- for(int i=0;i<=1000000+4;i++)
- last_time_ki_position[i]=-1;
- for(int i=1;i<=n;i++)
- scanf("%d",&A[i]);
- scanf("%d",&q);
- for(int i=1;i<=q;i++)
- {
- scanf("%d %d",&l,&r);
- Query[i]=make_pair(r,make_pair(l,i));
- }
- sort(Query+1,Query+q+1);
- for(int i=1;i<=n;i++)
- {
- if(last_time_ki_position[A[i]]!=-1) //pehle aya hai kabhi na kabhi
- {
- update(last_time_ki_position[A[i]],-1);
- }
- last_time_ki_position[A[i]]=i;
- update(last_time_ki_position[A[i]],1);
- while(qcounter<=q)
- {
- if(Query[qcounter].first==i)
- {int value=cum_sum(Query[qcounter].first)-cum_sum(Query[qcounter].second.first-1);
- query_ka_index[Query[qcounter].second.second]=value;
- qcounter++;
- }
- else
- break;
- }
- }
- for(int i=1;i<=q;i++)
- printf("%d\n",query_ka_index[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement