Advertisement
Falak_Ahmed_Shakib

mO'S ALGO

Nov 10th, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. #define pb push_back
  5. #define ff first
  6. #define ss second
  7. #define M 1000100
  8. #define BLOCK 174
  9.  
  10. ll answer;
  11.  
  12. struct query
  13. {
  14. ll left,right,ind;
  15. }Q[M+10];
  16.  
  17. ll ans[M+10];
  18. ll ara[M+10];
  19. ll mp[M+10];
  20.  
  21. void add(ll index)
  22. {
  23. mp[ara[index]]++;
  24. if(mp[ara[index]]==1)
  25. {
  26. answer++;
  27. }
  28. }
  29.  
  30. void _remove(int index)
  31. {
  32. mp[ara[index]]--;
  33. if(mp[ara[index]]==0)
  34. {
  35. answer--;
  36. }
  37.  
  38. }
  39.  
  40. bool cmp(query f,query s)
  41. {
  42. if((f.left/BLOCK)!=(s.left/BLOCK))
  43. return (f.left/BLOCK)<(s.left/BLOCK);
  44. else
  45. return f.right<s.right;
  46. }
  47.  
  48. int main()
  49. {
  50. ll n;
  51.  
  52. cin>>n;
  53.  
  54. for(ll i=0;i<n;i++)
  55. {
  56. cin>>ara[i];
  57. }
  58.  
  59. ll q;
  60.  
  61.  
  62. cin>>q;
  63.  
  64. for(ll i=0;i<q;i++)
  65. {
  66. ll a,b;
  67.  
  68. cin>>a>>b;
  69.  
  70. Q[i].ind=i;
  71.  
  72. Q[i].left=a-1;
  73.  
  74. Q[i].right=b-1;
  75. }
  76.  
  77. sort(Q,Q+q,cmp);
  78.  
  79. ll cl=0,cr=0;
  80.  
  81. for(ll i=0;i<q;i++)
  82. {
  83. ll left=Q[i].left,right=Q[i].right;
  84.  
  85. while(cl<left)
  86. {
  87. _remove(cl),cl++;
  88. }
  89. while(cl>left)
  90. {
  91. add(cl-1),cl--;
  92. }
  93. while(cr<=right)
  94. {
  95. add(cr),cr++;
  96. }
  97. while(cr>(right+1))
  98. {
  99. _remove(cr-1),cr--;
  100. }
  101.  
  102. ans[Q[i].ind]=answer;
  103. }
  104. for(ll i=0;i<q;i++)
  105. {
  106. cout<<ans[i]<<endl;
  107. }
  108.  
  109. return 0;
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement