Submission
# | When | Author | Problem | Language | CPU | Memory | |
---|---|---|---|---|---|---|---|
4317 | 2022-02-18 20:42:53 | ewu_ieee21_user_34 | Range Equal Query | C++ 17 | 1121 ms | 3592 kb | Time Limit Exceeded - 9 |
Test Cases
# | CPU | Memory | Points | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | 3 ms | 3476 kb | 1 | Accepted | |||||||
2 | 4 ms | 3480 kb | 1 | Accepted | |||||||
3 | 3 ms | 3484 kb | 1 | Accepted | |||||||
4 | 9 ms | 3472 kb | 1 | Accepted | |||||||
5 | 9 ms | 3548 kb | 1 | Accepted | |||||||
6 | 7 ms | 3432 kb | 1 | Accepted | |||||||
7 | 7 ms | 3592 kb | 1 | Accepted | |||||||
8 | 8 ms | 3516 kb | 1 | Accepted | |||||||
9 | 1121 ms | 668 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
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; template <typename num_t> using ordered_set = tree<num_t,null_type,less<num_t>,rb_tree_tag,tree_order_statistics_node_update>; const int DEBUGGER = 0; #define io ios_base::sync_with_stdio(0); cin.tie(NULL) #define mset(a,v) memset(a,v,sizeof(a)) #define lp(i,a,n) for(int i=a;i<n;i++) #define lpr(i,a,n) for(int i=n-1;i>=a;i--) #define stlp(it,stl) for(__typeof(stl.begin()) it=stl.begin();it!=stl.end();it++) #define stlpr(it,stl) for(__typeof(stl.rbegin()) it=stl.rbegin();it!=stl.rend();it++) #define r(a) a.begin(),a.end() #define II ({ ll TEMP; cin>>TEMP; TEMP; }) #define SI ({ string TEMP; cin>>TEMP; TEMP; }) #define AI(a) ({ int n=sizeof(a)/sizeof(a[0]); lp(I,0,n)a[I]=II; }) #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'; }) #define VI(v) ({ lp(I,0,v.size())v[I]=II; }) #define VO(v) ({ if(DEBUGGER)cout<<#v<<": ";lp(I,0,v.size()){cout<<(I?" ":"")<<v[I];} if(DEBUGGER)cout<<endl;else cout<<'\n'; }) #define outa(a) ({ if(DEBUGGER)dbg(a); else cout<<a<<'\n'; }) #define dbg(a) ({ if(DEBUGGER)cout<<#a<<" = "<<a<<endl; }) #define cbit(n,p) ((n)&(1LL<<(p))) #define sbit(n,p) ((n)|(1LL<<(p))) #define tbit(n,p) ((n)^(1LL<<(p))) #define F first #define S second typedef long long ll; typedef pair<ll,ll> pll; typedef vector<ll> vl; const ll MAX = 1e5+5; const ll INF = 9e18; const double PI = 3.141592653589793238462; const int hc = 2; const ll MOD[5] = {(ll)1e9+7,(ll)1e9+9,(ll)1e9+21,(ll)1e9+33,(ll)1e9+87}; const ll pr[5]={1000003,1000033,1000037,1000039,1000081}; ll n,m; vl a,b; pll trN[4*MAX]; ll bigMOD(ll a,ll x,ll MOD){ if(x==0)return 1; if(x==1 || a<=1)return a%MOD; ll r=bigMOD(a,x/2,MOD); r=(r*r)%MOD; if(x&1) r=(r*a)%MOD; return r; } pll hashval(vl v){ pll ans; ll p_pow[2]={1,1}; lp(i,0,v.size()){ ans.F=(ans.F+v[i]*p_pow[0])%MOD[0]; p_pow[0]=(p_pow[0]*pr[0])%MOD[0]; ans.S=(ans.S+v[i]*p_pow[1])%MOD[1]; p_pow[1]=(p_pow[1]*pr[1])%MOD[1]; } return ans; } void combine(auto &trP,auto &trL,auto &trR,int l,int r,int m){ ll val=trR.F*bigMOD(pr[0],m-l+1,MOD[0]); val%=MOD[0]; val=(val+trL.F)%MOD[0]; trP.F=val; val=trR.S*bigMOD(pr[1],m-l+1,MOD[1]); val%=MOD[1]; val=(val+trL.S)%MOD[1]; trP.S=val; } void init(int n,int l,int r){ if(l==r){ trN[n]={a[l],a[l]}; return; } int m=(l+r)/2; init(2*n,l,m); init(2*n+1,m+1,r); combine(trN[n],trN[2*n],trN[2*n+1],l,r,m); } void update(int n,int l,int r,int i,ll val){ if(i<l || r<i)return; if(i<=l && r<=i){ a[i]=val; trN[n]={a[l],a[l]}; return; } int m=(l+r)/2; update(2*n,l,m,i,val); update(2*n+1,m+1,r,i,val); combine(trN[n],trN[2*n],trN[2*n+1],l,r,m); } pll query(int n,int l,int r,int i,int j){ if(j<l || r<i) return {0,0}; if(i<=l && r<=j) return trN[n]; int m=(l+r)/2; if(j<m+1) return query(2*n,l,m,i,j); if(m<i) return query(2*n+1,m+1,r,i,j); pll trQL=query(2*n,l,m,i,j); pll trQR=query(2*n+1,m+1,r,i,j); pll trP; combine(trP,trQL,trQR,max(i,l),min(r,j),m); return trP; } void solve(){ n=II,m=II; lp(i,0,n)a.push_back(II); lp(i,0,m)b.push_back(II); pll bhash=hashval(b); init(1,0,n-1); ll q=II; while(q--){ if(II==1){ ll i=II-1,x=II; update(1,0,n-1,i,x); } else{ ll l=II-1,r=II-1; pll ahash=query(1,0,n-1,l,r); if(ahash==bhash) outa("YES"); else outa("NO"); } } } int main(void){ io; int multipletest=0; if(multipletest){ int tc; cin>>tc; while(tc--) solve(); } else solve(); return 0; }