Submission #407143

#TimeUsernameProblemLanguageResultExecution timeMemory
407143luka1234XORanges (eJOI19_xoranges)C++14
100 / 100
646 ms9244 KiB
#include <bits/stdc++.h> #define ll long long #define ff first #define ss second using namespace std; int a1[100001],a2[100001]; int t1[400001]; int t2[400001]; void build1(int v,int tl,int tr){ if(tl==tr) t1[v]=a1[tl]; else{ int m=(tl+tr)/2; build1(2*v,tl,m); build1(2*v+1,m+1,tr); t1[v]=t1[2*v]^t1[2*v+1]; } } int get1(int v,int tl,int tr,int l,int r){ if(l==tl&&r==tr) return t1[v]; int m=(tl+tr)/2; if(r<=m) return get1(2*v,tl,m,l,r); else{ if(l>m) return get1(2*v+1,m+1,tr,l,r); else{ return get1(2*v,tl,m,l,m)^get1(2*v+1,m+1,tr,m+1,r); } } } void update1(int v,int tl,int tr,int p,int x){ if(tl==tr) t1[v]=x; else{ int m=(tl+tr)/2; if(p<=m) update1(2*v,tl,m,p,x); else update1(2*v+1,m+1,tr,p,x); t1[v]=t1[2*v]^t1[2*v+1]; } } void build2(int v,int tl,int tr){ if(tl==tr) t2[v]=a2[tl]; else{ int m=(tl+tr)/2; build2(2*v,tl,m); build2(2*v+1,m+1,tr); t2[v]=t2[2*v]^t2[2*v+1]; } } int get2(int v,int tl,int tr,int l,int r){ if(l==tl&&r==tr) return t2[v]; int m=(tl+tr)/2; if(r<=m) return get2(2*v,tl,m,l,r); else{ if(l>m) return get2(2*v+1,m+1,tr,l,r); else{ return get2(2*v,tl,m,l,m)^get2(2*v+1,m+1,tr,m+1,r); } } } void update2(int v,int tl,int tr,int p,int x){ if(tl==tr) t2[v]=x; else{ int m=(tl+tr)/2; if(p<=m) update2(2*v,tl,m,p,x); else update2(2*v+1,m+1,tr,p,x); t2[v]=t2[2*v]^t2[2*v+1]; } } int main(){ int n,t,cnt1=1,cnt2=1; cin>>n>>t; for(int k=1;k<=n;k++){ if(k%2==0) cin>>a1[cnt1],cnt1++; else cin>>a2[cnt2],cnt2++; } build1(1,1,cnt1-1); build2(1,1,cnt2-1); while(t--){ int aa,b,c; cin>>aa>>b>>c; if(aa==2){ int len=c-b+1; if(len%2==0) cout<<0<<"\n"; else{ int ans; if(b%2==0){ ans=get1(1,1,cnt1-1,b/2,c/2); } else{ ans=get2(1,1,cnt2-1,b/2+1,c/2+1); } cout<<ans<<"\n"; } } else{ if(b%2==0){ update1(1,1,cnt1-1,b/2,c); } else{ update2(1,1,cnt2-1,b/2+1,c); } } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...