Submission #1176727

#TimeUsernameProblemLanguageResultExecution timeMemory
1176727AlgorithmWarriorXORanges (eJOI19_xoranges)C++20
100 / 100
306 ms6484 KiB
#include <bits/stdc++.h> using namespace std; /// lungime para => 0 /// lungime impara => 101010101...101010101 int const MAX=2e5+5; int n,m; int v[MAX]; struct AINT{ int par[4*MAX],impar[4*MAX]; void update(int nod,int st,int dr,int poz,int val){ if(st==dr){ if(poz%2==0) par[nod]=val; else impar[nod]=val; } else{ int mij=(st+dr)/2; if(poz<=mij) update(2*nod,st,mij,poz,val); else update(2*nod+1,mij+1,dr,poz,val); par[nod]=(par[2*nod]^par[2*nod+1]); impar[nod]=(impar[2*nod]^impar[2*nod+1]); } } int query(int nod,int st,int dr,int a,int b,bool tip){ if(a<=st && dr<=b) return tip?impar[nod]:par[nod]; int xorr=0; int mij=(st+dr)/2; if(a<=mij) xorr^=query(2*nod,st,mij,a,b,tip); if(b>mij) xorr^=query(2*nod+1,mij+1,dr,a,b,tip); return xorr; } }aint; void read(){ cin>>n>>m; int i; for(i=1;i<=n;++i){ cin>>v[i]; aint.update(1,1,n,i,v[i]); } } void process_queries(){ int i; for(i=1;i<=m;++i){ int type; cin>>type; if(type==1){ int ind,val; cin>>ind>>val; aint.update(1,1,n,ind,val); } else{ int l,r; cin>>l>>r; int len=r-l+1; if(len%2==0) cout<<0<<'\n'; else cout<<aint.query(1,1,n,l,r,l%2)<<'\n'; } } } int main() { read(); process_queries(); 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...