Advertisement
Fahim_7861

Range Minimum Query (Aman)-

Sep 24th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll long long
  5. #define pii pair<ll,ll>
  6. #define bug(a) cerr << #a << " : " << a << endl;
  7. #define FastRead ios_base::sync_with_stdio(false);cin.tie(NULL);
  8.  
  9. const int MAX = 1e5+5;
  10.  
  11. struct data
  12. {
  13. int l,r,idx;
  14. };
  15. int BLOCK_SIZE;
  16. bool cmp(data a,data b)
  17. {
  18. if(a.l/BLOCK_SIZE != b.l/BLOCK_SIZE)
  19. return a.l/BLOCK_SIZE < b.l/BLOCK_SIZE;
  20. else if((a.l/BLOCK_SIZE)&1)
  21. return a.r < b.r;
  22. return a.r > b.r;
  23. }
  24.  
  25. data Q[MAX];
  26. int a[MAX] , ans[MAX] , mp[MAX];
  27. int cnt;
  28.  
  29. void add(int x)
  30. {
  31. if(!mp[x])
  32. cnt++;
  33. mp[x]++;
  34. }
  35. void del(int x)
  36. {
  37. mp[x]--;
  38. if(!mp[x])
  39. cnt--;
  40. }
  41. void MO(int n,int q)
  42. {
  43. BLOCK_SIZE = sqrt(n);
  44.  
  45. sort(Q,Q+q,cmp);
  46.  
  47. int st = 0 , en = -1;
  48. cnt = 0;
  49.  
  50. for(int i=0;i<q;i++)
  51. {
  52. int l = Q[i].l-1 , r = Q[i].r-1 , idx = Q[i].idx;
  53.  
  54. while(st > l)
  55. {
  56. st--;
  57. add(a[st]);
  58. }
  59. while(st < l)
  60. {
  61. del(a[st]);
  62. st++;
  63. }
  64. while(en < r)
  65. {
  66. en++;
  67. add(a[en]);
  68. }
  69. while(en > r)
  70. {
  71. del(a[en]);
  72. en--;
  73. }
  74.  
  75. ans[idx] = cnt;
  76. }
  77.  
  78. for(int i=0;i<q;i++)
  79. printf("%d\n",ans[i]);
  80. }
  81. int main()
  82. {
  83. int t,cas=1;
  84. scanf("%d",&t);
  85. while(t--)
  86. {
  87. int n,q;
  88.  
  89. scanf("%d%d",&n,&q);
  90. for(int i=0;i<n;i++)
  91. scanf("%d",&a[i]);
  92.  
  93. for(int i=0;i<q;i++)
  94. {
  95. scanf("%d%d",&Q[i].l,&Q[i].r);
  96. Q[i].idx = i;
  97. }
  98.  
  99. printf("Case %d:\n",cas++);
  100. MO(n,q);
  101.  
  102. for(int i=0;i<MAX;i++)
  103. mp[i] = 0;
  104. }
  105. }
  106.  
  107. //Porblem Link:http://www.lightoj.com/volume_showproblem.php?problem=1188
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement