Advertisement
Guest User

Untitled

a guest
May 23rd, 2015
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef vector<int> vi;
  5. typedef pair<int,int> pii;
  6. typedef pair<ll,ll> pll;
  7. typedef vector<pii> vpii;
  8. typedef unsigned long long llu;
  9.  
  10. #define debug(x) cerr<<#x<<" "<<x<<endl;
  11. #define f first
  12. #define s second
  13. #define mp make_pair
  14. #define pb push_back
  15. int A[30000+10];
  16. int last_time_ki_position[1000000+10];
  17. int cou[30000+10];
  18. int query_ka_index[200000+10];
  19. int n,q,l,r,qcounter=1;
  20. pair<int,pii> Query[200000+10];
  21. void update(int position,int value)
  22. {
  23. while(position<=n+2)
  24. {
  25. cou[position]+=value;
  26. position+=((position)&(-position));
  27. }
  28. }
  29. int cum_sum(int index)
  30. { int sum=0;
  31. while(index>=1)
  32. {
  33. sum=sum+cou[index];
  34. index-=(index&(-index));
  35. }
  36. return sum;
  37. }
  38. int main()
  39. {
  40. scanf("%d",&n);
  41. for(int i=0;i<=1000000+4;i++)
  42. last_time_ki_position[i]=-1;
  43. for(int i=1;i<=n;i++)
  44. scanf("%d",&A[i]);
  45. scanf("%d",&q);
  46. for(int i=1;i<=q;i++)
  47. {
  48. scanf("%d %d",&l,&r);
  49. Query[i]=make_pair(r,make_pair(l,i));
  50. }
  51. sort(Query+1,Query+q+1);
  52. for(int i=1;i<=n;i++)
  53. {
  54. if(last_time_ki_position[A[i]]!=-1) //pehle aya hai kabhi na kabhi
  55. {
  56. update(last_time_ki_position[A[i]],-1);
  57. }
  58. last_time_ki_position[A[i]]=i;
  59. update(last_time_ki_position[A[i]],1);
  60. while(qcounter<=q)
  61. {
  62. if(Query[qcounter].first==i)
  63. {int value=cum_sum(Query[qcounter].first)-cum_sum(Query[qcounter].second.first-1);
  64. query_ka_index[Query[qcounter].second.second]=value;
  65. qcounter++;
  66. }
  67. else
  68. break;
  69. }
  70. }
  71. for(int i=1;i<=q;i++)
  72. printf("%d\n",query_ka_index[i]);
  73. return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement