Submission #491672

#TimeUsernameProblemLanguageResultExecution timeMemory
491672uncriptedXORanges (eJOI19_xoranges)C++11
38 / 100
490 ms7932 KiB
#include<bits/stdc++.h> using namespace std; int fl[400000]; int fk[400000]; int a[300000]; int n,q; void updatel(int s, int x){ while(s<=n){ fl[s]=fl[s]^x; s+=s&(-s); } } int getl(int s){ int sum=0; while(s>0){ sum=sum^fl[s]; s-=s&(-s); } return sum; } void updatek(int s, int x){ while(s<=n){ fk[s]=fk[s]^x; s+=s&(-s); } } int getk(int s){ int sum=0; while(s>0){ sum=sum^fk[s]; s-=s&(-s); } return sum; } int main(){ cin>>n>>q; for(int i=1; i<=n; i++){ cin>>a[i]; if(i%2==0){ updatel(i/2, a[i]); }else{ updatek(i/2+1, a[i]); } } for(int i=0; i<q; i++){ int x; cin>>x; if(x==1){ int x,y; cin>>x>>y; if(x%2==0){ updatel(x/2, y^a[x]); }else{ updatek(x/2+1, y^a[x]); } }else{ int x,y; cin>>x>>y; if((y-x+1)%2==0){ cout<<"0"<<endl; continue; } if(x%2==0){ int tot; x--; tot=getl(y/2)^(getl(x/2)); cout<<tot<<endl; }else{ int tot; tot=getk(y/2+1)^(getk(x/2)); cout<<tot<<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...