Loading...
Submission
# When Author Problem Language CPU Memory
3642 2021-12-22 13:19:39 ewu_ieee21_user_34 Range Equal Query C++ 11 36 ms 3620 kb Wrong Answer - 4
Test Cases
# CPU Memory Points
1 3 ms 3392 kb 1 Accepted
2 3 ms 3496 kb 1 Accepted
3 3 ms 3520 kb 1 Accepted
4 36 ms 3620 kb 0 Wrong Answer
5 0 ms 0 kb 0 Skipped
6 0 ms 0 kb 0 Skipped
7 0 ms 0 kb 0 Skipped
8 0 ms 0 kb 0 Skipped
9 0 ms 0 kb 0 Skipped
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) ({ 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 pair<pll,ll> ppll;
  36. typedef vector<ll> vl;
  37.  
  38. const int hc = 5;
  39. const ll MAX = 1e5+5;
  40. const ll MOD[hc] = {(ll)1e9+7,(ll)1e9+9,(ll)1e9+21,(ll)1e9+33,(ll)1e9+87};
  41. const ll INF = 9e18;
  42. const double PI = 3.141592653589793238462;
  43.  
  44. ll ps[hc][320],pr[hc]={110017,110023,110039,110051,110059};
  45. ll n,m,len;
  46. ll blc[hc][320],blc2[hc][320];
  47. vl a,b,blcvl[320];
  48.  
  49. ll bigMOD(ll a,ll x,ll MOD){
  50. if(x==0)return 1;
  51. if(x==1 || a<=1)return a%MOD;
  52. ll r=bigMOD(a,x/2,MOD);
  53. r=(r*r)%MOD;
  54. if(x&1)
  55. r=(r*a)%MOD;
  56. return r;
  57. }
  58.  
  59. vl hashval(vl v){
  60. vl ans(hc);
  61.  
  62. lp(h,0,hc){
  63. ll p_pow=1;
  64. lp(i,0,v.size()){
  65. ans[h]=(ans[h]+v[i]*p_pow)%MOD[h];
  66. p_pow=(p_pow*pr[h])%MOD[h];
  67. }
  68. }
  69. return ans;
  70. }
  71.  
  72. void init(){
  73. len=(int)sqrt(n)+1;
  74. for(int i=0;i<n;i+=len){
  75. vl ax;
  76. lp(k,i,min(i+len,n))
  77. ax.push_back(a[k]);
  78.  
  79. vl bx;
  80. lp(k,i,min(i+len,m))
  81. bx.push_back(b[k]);
  82.  
  83. vl hv=hashval(ax);
  84. lp(h,0,hc)
  85. blc[h][i/len]=hv[h];
  86. blcvl[i/len]=ax;
  87.  
  88. hv=hashval(bx);
  89. lp(h,0,hc)
  90. blc2[h][i/len]=hv[h];
  91. }
  92. }
  93.  
  94. void update(int i,int val){
  95. int c_i=i/len;
  96.  
  97. blcvl[c_i][i%len]=val;
  98.  
  99. vl hv=hashval(blcvl[c_i]);
  100. lp(h,0,hc)
  101. blc[h][c_i]=hv[h];
  102.  
  103. a[i]=val;
  104. }
  105.  
  106. ll rv(ll i,ll j,int c,int d){
  107. ll sz=j-i+1;
  108. if(!sz)return 0;
  109. if(c){
  110. ll lft=(blc2[d][i/len]*bigMOD(ps[d][sz],MOD[d]-2,MOD[d]))%MOD[d];
  111. return (blc2[d][i/len]-lft*ps[d][sz]+MOD[d])%MOD[d];
  112. }
  113. return (blc2[d][i/len]*bigMOD(ps[d][len-sz],MOD[d]-2,MOD[d]))%MOD[d];
  114. }
  115.  
  116. bool query(int l,int r){
  117. bool ans=1;
  118. int c_l=l/len,c_r=r/len;
  119. if(c_l==c_r){
  120. for(int i=l,j=0;i<=r;i++,j++)
  121. ans&=(a[i]==b[j]);
  122. }
  123. else{
  124. int j=0;
  125. for(int i=l, l_end=(c_l+1)*len-1;i<=l_end;i++,j++){
  126. ans&=a[i]==b[j];
  127. }
  128. dbg(ans);
  129.  
  130. for(int i=c_l+1;i<=c_r-1;i++,j+=len){
  131. ll in1=j;
  132. ll in2=((j/len)+1)*len-1;
  133. ll in3=j+len-1;
  134.  
  135. ll hs[hc];
  136. lp(h,0,hc)
  137. hs[h]=(((rv(in1,in2,1,h)*ps[h][in2-in1+1])%MOD[h])+rv(in2+1,in3,0,h))%MOD[h];
  138.  
  139. lp(h,0,hc)
  140. ans&=blc[h][i]==hs[h];
  141. }
  142. dbg(ans);
  143.  
  144. for(int i=c_r*len;i<=r;i++,j++){
  145. ans&=a[i]==b[j];
  146. }
  147. dbg(ans);
  148. }
  149. return ans;
  150. }
  151.  
  152. void solve(){
  153. lp(h,0,hc){
  154. ps[h][0]=1;
  155. lp(i,1,320)
  156. ps[h][i]=(ps[h][i-1]*pr[h])%MOD[h];
  157. }
  158.  
  159.  
  160. map<ll,ll>mp;
  161. vl tmp;
  162.  
  163. n=II,m=II;
  164. lp(i,0,n)a.push_back(II),tmp.push_back(a.back());
  165. lp(i,0,m)b.push_back(II),tmp.push_back(b.back());
  166.  
  167. sort(r(tmp));
  168. ll v=1;
  169. lp(i,0,tmp.size())
  170. if(mp.find(tmp[i])==mp.end())
  171. mp[tmp[i]]=v++;
  172.  
  173. lp(i,0,n)a[i]=mp[a[i]];
  174. lp(i,0,m)b[i]=mp[b[i]];
  175.  
  176. init();
  177.  
  178. if(DEBUGGER){
  179. lp(i,0,n)cout<<a[i]<<' ';cout<<endl;
  180. lp(i,0,m)cout<<b[i]<<' ';cout<<endl;
  181. dbg(len);
  182. // lp(i,0,len)cout<<blc[i]<<' ';cout<<endl;
  183. lp(i,0,len){
  184. lp(j,0,blcvl[i].size())
  185. cout<<blcvl[i][j]<<' ';
  186. cout<<", ";
  187. }cout<<endl;
  188. // lp(i,0,len)cout<<blc2[i]<<' ';cout<<endl;
  189. }
  190.  
  191. ll q=II;
  192. while(q--){
  193. if(II==1){
  194. ll i=II-1,x=II;
  195. if(mp.find(x)==mp.end())
  196. mp[x]=v++;
  197. x=mp[x];
  198. update(i,x);
  199. }
  200. else{
  201. ll l=II-1,r=II-1;
  202. if(query(l,r)) outa("YES");
  203. else outa("NO");
  204. }
  205. }
  206. }
  207.  
  208. int main(void){
  209. io;
  210. int multipletest=0;
  211. if(multipletest){
  212. int tc;
  213. cin>>tc;
  214. while(tc--)
  215. solve();
  216. }
  217. else
  218. solve();
  219. return 0;
  220. }
  221.