Guest User

Untitled

a guest
Mar 2nd, 2021
517
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef pair<int, int> pi;
  6. typedef pair<ll,ll> pl;
  7. typedef vector<int> vi;
  8. typedef vector<ll> vl;
  9.  
  10. #define FOR(i, a, b) for (int i=a; i<(b); i++)
  11. #define F0R(i, a) for (int i=0; i<(a); i++)
  12. #define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
  13. #define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
  14. #define trav(a,x) for (auto& a : x)
  15.  
  16. #define sz(x) (int)(x).size()
  17. #define pb push_back
  18. #define f first
  19. #define s second
  20. #define lb lower_bound
  21. #define ub upper_bound
  22. #define all(x) x.begin(), x.end()
  23. #define ins insert
  24.  
  25. const ll SZ = 262144;
  26. ll seg[2*SZ];
  27.  
  28. void update(int p) {
  29. for (seg[p += SZ] = 1; p > 1; p >>= 1)
  30. seg[p>>1] = seg[(p|1)^1] + seg[p|1];
  31. }
  32.  
  33. ll query(int l, int r) {
  34. ll resL = 0, resR = 0; r++;
  35. for (l += SZ, r += SZ; l < r; l >>= 1, r >>= 1) {
  36. if (l&1) resL += seg[l++];
  37. if (r&1) resR += seg[--r];
  38. }
  39. return resL + resR;
  40. }
  41.  
  42. int main() {
  43. ios_base::sync_with_stdio(0); cin.tie(0);
  44. int N, Q; cin >> N >> Q;
  45. int A[N]; F0R(i, N) cin >> A[i];
  46. F0R(i, N) A[i]--;
  47. vector<pi> when;
  48. bool inStack[N]; F0R(i, N) inStack[i] = false;
  49. int lst[N]; F0R(i, N) lst[i] = -1;
  50. stack<int> cur;
  51. F0R(i, N) {
  52. if (inStack[A[i]]) {
  53. when.pb({lst[A[i]]+1, i});
  54. } else {
  55. when.pb({0, i});
  56. }
  57. lst[A[i]] = i;
  58. while (!cur.empty() && cur.top() > A[i]) {
  59. inStack[cur.top()] = false; cur.pop();
  60. }
  61. if (cur.empty() || cur.top() != A[i]) {
  62. cur.push(A[i]); inStack[A[i]] = true;
  63. }
  64. }
  65.  
  66. int p = 0;
  67. vector<pair<pi, int>> qs;
  68. F0R(i, Q) {
  69. int X, Y; cin >> X >> Y; X--; Y--;
  70. qs.pb({{X, Y}, i});
  71. }
  72. int ans[Q];
  73. sort(all(qs));
  74. sort(all(when));
  75. trav(a, qs) {
  76. while (p < sz(when) && when[p].f <= a.f.f) {
  77. update(when[p].s);
  78. p++;
  79. }
  80. ans[a.s] = query(a.f.f, a.f.s);
  81. }
  82.  
  83. F0R(i, Q) {
  84. cout << ans[i] << endl;
  85. }
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment