Advertisement
messh

Untitled

Dec 1st, 2023
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. // author : ssh.
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. // defines...
  6. #define all(a) a.begin(), a.end()
  7. #define pb push_back
  8. #define bp(a, i) binary_search(all(a), i)
  9. #define int long long
  10. // defines...
  11.  
  12. // mods and consts...
  13. string pi = "3141592653589793238462643383279502884";
  14. typedef long long ll;
  15. typedef long double ld;
  16. long long inf = 1e15;
  17. const int mod = 1e9 + 7;
  18. const int N = 3e5 + 1;
  19. ld eps = 0.00001;
  20.  
  21. // mods and consts...
  22.  
  23. struct node{
  24. int x, ev;
  25. };
  26.  
  27. bool cmp(node a, node b){
  28. return (a.x != b.x ? a.x < b.x : a.ev > b.ev);
  29. }
  30.  
  31. struct node2{
  32. int f, s, t;
  33. };
  34.  
  35. int t[N * 4];
  36. int arr[N], cnt[N];
  37. //void build(int v, int tl, int tr){
  38. // if(tl == tr){
  39. // t[v] = cnt[tl];
  40. // return;
  41. // }
  42. // int tm = (tl + tr) / 2;
  43. // build(v * 2 + 1, tl, tm);
  44. // build(v * 2 + 2, tm + 1, tr);
  45. // t[v] = t[v * 2 + 1] + t[v * 2 + 2];
  46. //}
  47.  
  48. void change(int v, int tl, int tr, int pos, int x){
  49. if(tl ==tr){
  50. t[v] = x;
  51. return;
  52. }
  53. int tm = (tl + tr) / 2;
  54. if(pos > tm){
  55. change(v * 2 + 2, tm + 1, tr, pos, x);
  56. } else {
  57. change(v * 2 + 1, tl, tm, pos, x);
  58. }
  59. t[v] = t[v * 2 + 1] + t[v * 2 + 2];
  60. }
  61.  
  62. int get(int v, int tl, int tr, int l, int r){
  63. if(l > tr || r < tl){
  64. return 0;
  65. }
  66. if(l <= tl && tr <= r) return t[v];
  67. int tm = (tl + tr) / 2;
  68. return get(v * 2 + 1, tl, tm, l, r) + get(v * 2 + 2, tm + 1, tr, l, r);
  69. }
  70.  
  71. void solve() {
  72. int n;
  73. cin >> n;
  74. for(int i = 0; i < n; ++i) cin >> arr[i];
  75. map<int,vector<node2>>help;
  76. map<pair<int,int>, vector<int>>st;
  77. int q;
  78. cin >> q;
  79. int j = 0;
  80. vector<int>ans(q);
  81. while(q--){
  82. int l, r;
  83. cin >> l >> r;
  84. --l, --r;
  85. help[r].pb({l, r, j});
  86.  
  87. ++j;
  88. }
  89.  
  90. map<int,int>pred;
  91. for(int i = 0; i < n; ++i){
  92. if(pred.find(arr[i]) != pred.end()){
  93. change(0, 0, n, pred[arr[i]], 0);
  94. }
  95. pred[arr[i]] = i;
  96. change(0, 0, n, i, 1);
  97. for(auto &c : help[i]){
  98. int l = c.f, r = c.s;
  99. int res = get(0, 0, n, l, r);
  100. ans[c.t] = res;
  101. }
  102. }
  103. for(int i = 0; i < ans.size(); ++i) cout << ans[i] << '\n';
  104.  
  105.  
  106.  
  107. }
  108.  
  109. signed main() {
  110. ios_base::sync_with_stdio(false);
  111. cin.tie(nullptr);
  112. cout.tie(nullptr);
  113. int tt = 1;
  114. //cin >> tt;
  115.  
  116. while (tt--) {
  117. solve();
  118. }
  119. }
  120. //1 5
  121. // 2 6
  122. // 3 4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement