Loading...
Submission
# When Author Problem Language CPU Memory
4316 2022-02-18 20:35:04 ewu_ieee21_user_34 Range Equal Query C++ 17 1116 ms 13000 kb Time Limit Exceeded - 9
Test Cases
# CPU Memory Points
1 34 ms 12920 kb 1 Accepted
2 32 ms 12888 kb 1 Accepted
3 30 ms 12828 kb 1 Accepted
4 41 ms 12944 kb 1 Accepted
5 52 ms 12948 kb 1 Accepted
6 39 ms 12964 kb 1 Accepted
7 40 ms 13000 kb 1 Accepted
8 41 ms 12888 kb 1 Accepted
9 1116 ms 600 kb 0 Time Limit Exceeded
10 0 ms 0 kb 0 Skipped
11 0 ms 0 kb 0 Skipped
12 0 ms 0 kb 0 Skipped
13 0 ms 0 kb 0 Skipped
14 0 ms 0 kb 0 Skipped
15 0 ms 0 kb 0 Skipped
16 0 ms 0 kb 0 Skipped
17 0 ms 0 kb 0 Skipped
18 0 ms 0 kb 0 Skipped
19 0 ms 0 kb 0 Skipped
20 0 ms 0 kb 0 Skipped
Source Code
  1. #include<bits/stdc++.h>
  2. #include<ext/pb_ds/assoc_container.hpp>
  3. #include<ext/pb_ds/tree_policy.hpp>
  4. using namespace std;
  5. using namespace __gnu_pbds;
  6.  
  7. template <typename num_t>
  8. using ordered_set = tree<num_t,null_type,less<num_t>,rb_tree_tag,tree_order_statistics_node_update>;
  9.  
  10. const int DEBUGGER = 0;
  11.  
  12. #define io ios_base::sync_with_stdio(0); cin.tie(NULL)
  13. #define mset(a,v) memset(a,v,sizeof(a))
  14. #define lp(i,a,n) for(int i=a;i<n;i++)
  15. #define lpr(i,a,n) for(int i=n-1;i>=a;i--)
  16. #define stlp(it,stl) for(__typeof(stl.begin()) it=stl.begin();it!=stl.end();it++)
  17. #define stlpr(it,stl) for(__typeof(stl.rbegin()) it=stl.rbegin();it!=stl.rend();it++)
  18. #define r(a) a.begin(),a.end()
  19. #define II ({ ll TEMP; cin>>TEMP; TEMP; })
  20. #define SI ({ string TEMP; cin>>TEMP; TEMP; })
  21. #define AI(a) ({ int n=sizeof(a)/sizeof(a[0]); lp(I,0,n)a[I]=II; })
  22. #define AO(a) ({ int n=sizeof(a)/sizeof(a[0]); lp(I,0,n){cout<<(I?" ":"")<<a[I];} if(DEBUGGER)cout<<endl;else cout<<'\n'; })
  23. #define VI(v) ({ lp(I,0,v.size())v[I]=II; })
  24. #define VO(v) ({ if(DEBUGGER)cout<<#v<<": ";lp(I,0,v.size()){cout<<(I?" ":"")<<v[I];} if(DEBUGGER)cout<<endl;else cout<<'\n'; })
  25. #define outa(a) ({ if(DEBUGGER)dbg(a); else cout<<a<<'\n'; })
  26. #define dbg(a) ({ if(DEBUGGER)cout<<#a<<" = "<<a<<endl; })
  27. #define cbit(n,p) ((n)&(1LL<<(p)))
  28. #define sbit(n,p) ((n)|(1LL<<(p)))
  29. #define tbit(n,p) ((n)^(1LL<<(p)))
  30. #define F first
  31. #define S second
  32.  
  33. typedef long long ll;
  34. typedef pair<ll,ll> pll;
  35. typedef vector<ll> vl;
  36.  
  37. const ll MAX = 1e5+5;
  38. const ll INF = 9e18;
  39. const double PI = 3.141592653589793238462;
  40.  
  41. const int hc = 2;
  42. const ll MOD[5] = {(ll)1e9+7,(ll)1e9+9,(ll)1e9+21,(ll)1e9+33,(ll)1e9+87};
  43. const ll pr[5]={1000003,1000033,1000037,1000039,1000081};
  44.  
  45. ll n,m;
  46. vl a,b;
  47.  
  48. ll bigMOD(ll a,ll x,ll MOD){
  49. if(x==0)return 1;
  50. if(x==1 || a<=1)return a%MOD;
  51. ll r=bigMOD(a,x/2,MOD);
  52. r=(r*r)%MOD;
  53. if(x&1)
  54. r=(r*a)%MOD;
  55. return r;
  56. }
  57.  
  58. vl hashval(vl v){
  59. vl ans(hc);
  60. lp(h,0,hc){
  61. ll p_pow=1;
  62. lp(i,0,v.size()){
  63. ans[h]=(ans[h]+v[i]*p_pow)%MOD[h];
  64. p_pow=(p_pow*pr[h])%MOD[h];
  65. }
  66. }
  67. return ans;
  68. }
  69.  
  70. vl trN[4*MAX];
  71.  
  72. void combine(auto &trP,auto &trL,auto &trR,int l,int r,int m){
  73. trP.clear();
  74. lp(i,0,hc){
  75. ll val=trR[i]*bigMOD(pr[i],m-l+1,MOD[i]);
  76. val%=MOD[i];
  77. val=(val+trL[i])%MOD[i];
  78. trP.push_back(val);
  79. }
  80. }
  81.  
  82. void init(int n,int l,int r){
  83. if(l==r){
  84. trN[n]=({vl v(hc,a[l]);v;});
  85. return;
  86. }
  87. int m=(l+r)/2;
  88. init(2*n,l,m);
  89. init(2*n+1,m+1,r);
  90.  
  91. combine(trN[n],trN[2*n],trN[2*n+1],l,r,m);
  92. }
  93.  
  94. void update(int n,int l,int r,int i,ll val){
  95. if(i<l || r<i)return;
  96. if(i<=l && r<=i){
  97. a[i]=val;
  98. trN[n]=({vl v(hc,a[l]);v;});
  99. return;
  100. }
  101. int m=(l+r)/2;
  102. update(2*n,l,m,i,val);
  103. update(2*n+1,m+1,r,i,val);
  104.  
  105. combine(trN[n],trN[2*n],trN[2*n+1],l,r,m);
  106. }
  107.  
  108. vl query(int n,int l,int r,int i,int j){
  109. if(j<l || r<i) return ({vl v(hc);v;});
  110. if(i<=l && r<=j) return trN[n];
  111. int m=(l+r)/2;
  112.  
  113. if(j<m+1)
  114. return query(2*n,l,m,i,j);
  115. if(m<i)
  116. return query(2*n+1,m+1,r,i,j);
  117.  
  118. vl trQL=query(2*n,l,m,i,j);
  119. vl trQR=query(2*n+1,m+1,r,i,j);
  120. vl trP;
  121. combine(trP,trQL,trQR,max(i,l),min(r,j),m);
  122. return trP;
  123. }
  124.  
  125.  
  126. void solve(){
  127. n=II,m=II;
  128. lp(i,0,n)a.push_back(II);
  129. lp(i,0,m)b.push_back(II);
  130. vl bhash=hashval(b);
  131.  
  132. init(1,0,n-1);
  133.  
  134. ll q=II;
  135. while(q--){
  136. if(II==1){
  137. ll i=II-1,x=II;
  138. update(1,0,n-1,i,x);
  139. }
  140. else{
  141. ll l=II-1,r=II-1;
  142. vl ahash=query(1,0,n-1,l,r);
  143. if(ahash==bhash) outa("YES");
  144. else outa("NO");
  145. }
  146. }
  147. }
  148.  
  149. int main(void){
  150. io;
  151. int multipletest=0;
  152. if(multipletest){
  153. int tc;
  154. cin>>tc;
  155. while(tc--)
  156. solve();
  157. }
  158. else
  159. solve();
  160. return 0;
  161. }
  162.