Submission #819812

#TimeUsernameProblemLanguageResultExecution timeMemory
819812Andrijanikolic73XORanges (eJOI19_xoranges)C++17
75 / 100
307 ms17628 KiB
#include <bits/stdc++.h> #define pb push_back #define ll long long #define int long long using namespace std; const int N=2e5+50; const int inf=1e18; const int mod=1e9+7; int a[N]; int n; int q; int A[N]; struct segtree{ int t[4*N]={0}; void build(int v,int tl,int tr){ if(tl==tr)t[v]=A[tl]; else { int tm=(tl+tr)/2; build(v*2,tl,tm); build(v*2+1,tm+1,tr); t[v]=(t[v*2]^t[v*2+1]); } } int query(int v,int tl,int tr,int l,int r){ if(tr<l||tl>r)return 0; if(l<=tl&&tr<=r)return t[v]; int tm=(tl+tr)/2; return (query(v*2,tl,tm,l,r)^query(v*2+1,tm+1,tr,l,r)); } void update(int v,int tl,int tr,int index,int value){ if(tl==tr){ t[v]=value; } else { int tm=(tl+tr)/2; if(index<=tm){ update(v*2,tl,tm,index,value); } else { update(v*2+1,tm+1,tr,index,value); } t[v]=(t[v*2]^t[v*2+1]); } } }; segtree seg[2]; /* int brute(int l,int r){ int ans=0; for(int i=l;i<=r;i++){ for(int j=i;j<=r;j++){ ans^=seg.query(1,1,n,i,j); } } return ans; } */ int solve(int l,int r,int o){ if((r-l+1)%2==0)return 0; if(l==r)return a[l]; return seg[o].query(1,1,n,l,r); } signed main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n>>q; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++){ if(i%2==0)A[i]=a[i]; } seg[0].build(1,1,n); for(int i=1;i<=n;i++){ if(i%2==0)A[i]=0; else A[i]=a[i]; } seg[1].build(1,1,n); while(q--){ int o; cin>>o; if(o==1){ int i,x; cin>>i>>x; seg[i%2].update(1,1,n,i,x); } else { int l,r; cin>>l>>r; cout<<solve(l,r,l%2); cout<<endl; } } }
#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...