Loading...
Submission
# When Author Problem Language CPU Memory
7094 2023-03-03 02:22:34 amirhozaifa Range Equal Query C++ 17 335 ms 8352 kb Accepted
Test Cases
# CPU Memory Points
1 10 ms 5040 kb 1 Accepted
2 10 ms 5068 kb 1 Accepted
3 11 ms 5024 kb 1 Accepted
4 11 ms 4980 kb 1 Accepted
5 12 ms 4932 kb 1 Accepted
6 11 ms 5068 kb 1 Accepted
7 11 ms 5060 kb 1 Accepted
8 11 ms 5052 kb 1 Accepted
9 132 ms 8340 kb 1 Accepted
10 135 ms 8352 kb 1 Accepted
11 200 ms 8344 kb 1 Accepted
12 204 ms 8264 kb 1 Accepted
13 335 ms 8304 kb 1 Accepted
14 196 ms 8268 kb 1 Accepted
15 132 ms 8352 kb 1 Accepted
16 142 ms 8284 kb 1 Accepted
17 133 ms 8272 kb 1 Accepted
18 203 ms 8300 kb 1 Accepted
19 254 ms 8252 kb 1 Accepted
20 196 ms 8308 kb 1 Accepted
Source Code
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define F first
  5. #define S second
  6.  
  7. typedef long long ll;
  8.  
  9. const int MAX = 2e5 + 5;
  10. const int MOD[2] = {(int) 1e9 + 9, (int) 1e9 + 21};
  11. const int pr[2] = {1000003, 1000033};
  12.  
  13. inline int add(int x, int y, int c) { return (x + y) % MOD[c]; }
  14. inline int sub(int x, int y, int c) { return (x - y + MOD[c]) % MOD[c]; }
  15. inline int mul(int x, int y, int c) { return (x * (ll) y) % MOD[c]; }
  16.  
  17. int pw[2][MAX];
  18. void precompute() {
  19. for (int c = 0; c < 2; c++) {
  20. pw[c][0] = 1;
  21. for (int i = 1; i < MAX; i++)
  22. pw[c][i] = mul(pw[c][i - 1], pr[c], c);
  23. }
  24. }
  25.  
  26. pair<int, int> getHash(vector<int> &a) {
  27. pair<int, int> hs = {0, 0};
  28. for (int i = 1; i < a.size(); i++) {
  29. hs.first = add(mul(hs.first, pr[0], 0), a[i], 0);
  30. hs.second = add(mul(hs.second, pr[1], 1), a[i], 1);
  31. }
  32. return hs;
  33. }
  34.  
  35. int n;
  36. vector<int> a, b;
  37. pair<pair<int, int>,int> trN[4*MAX];
  38.  
  39. void combine(auto &trP,auto &trL,auto &trR){
  40. int lsz=trL.S,rsz=trR.S;
  41. trP.F.F=add(mul(trL.F.F,pw[0][rsz],0),trR.F.F,0);
  42. trP.F.S=add(mul(trL.F.S,pw[1][rsz],1),trR.F.S,1);
  43. trP.S=lsz+rsz;
  44. }
  45.  
  46. void init(int n,int l,int r){
  47. if(l==r){
  48. trN[n].F.F=trN[n].F.S=a[l];
  49. trN[n].S=1;
  50. return;
  51. }
  52. int m=(l+r)/2;
  53. init(2*n,l,m);
  54. init(2*n+1,m+1,r);
  55.  
  56. combine(trN[n],trN[2*n],trN[2*n+1]);
  57. }
  58.  
  59. void update(int n,int l,int r,int i,int c){
  60. if(i<l || r<i)return;
  61. if(i<=l && r<=i){
  62. a[l]=c;
  63. trN[n].F.F=a[l];
  64. trN[n].F.S=a[l];
  65. return;
  66. }
  67. int m=(l+r)/2;
  68. update(2*n,l,m,i,c);
  69. update(2*n+1,m+1,r,i,c);
  70.  
  71. combine(trN[n],trN[2*n],trN[2*n+1]);
  72. }
  73.  
  74. pair<pair<int, int>,int> query(int n,int l,int r,int i,int j){
  75. if(j<l || r<i) return {{0, 0},0};
  76. if(i<=l && r<=j) return trN[n];
  77. int m=(l+r)/2;
  78. auto trQL=query(2*n,l,m,i,j);
  79. auto trQR=query(2*n+1,m+1,r,i,j);
  80. pair<pair<int, int>,int> trP;
  81. combine(trP,trQL,trQR);
  82. return trP;
  83. }
  84.  
  85. void solve(int cs) {
  86. int n, m; cin >> n >> m;
  87.  
  88. a.clear(); a.push_back(0);
  89. for (int i = 1; i <= n; i++) {
  90. int x; cin >> x; a.push_back(x);
  91. }
  92.  
  93. b.clear(); b.push_back(0);
  94. for (int i = 1; i <= m; i++) {
  95. int x; cin >> x; b.push_back(x);
  96. }
  97.  
  98. auto hb = getHash(b);
  99.  
  100. init(1,1,n);
  101.  
  102. int q; cin >> q;
  103. while (q--) {
  104. int t; cin >> t;
  105. if (t == 1) {
  106. int i, v;
  107. cin >> i >> v;
  108. update(1,1,n,i,v);
  109. }
  110. else {
  111. int l, r;
  112. cin >> l >> r;
  113. auto ha = query(1,1,n,l,r).F;
  114. if (hb == ha)
  115. cout << "YES\n";
  116. else
  117. cout << "NO\n";
  118. }
  119. }
  120. }
  121.  
  122. int main() {
  123. ios_base::sync_with_stdio(0);
  124. cin.tie(NULL);
  125.  
  126. precompute();
  127.  
  128. int tc = 1;
  129. // cin >> tc;
  130. for (int cs = 1; tc--; cs++)
  131. solve(cs);
  132.  
  133. return 0;
  134. }
  135.