Submission #1221673

#TimeUsernameProblemLanguageResultExecution timeMemory
1221673mayacXORanges (eJOI19_xoranges)C++20
0 / 100
1101 ms95420 KiB
#include <iostream> #include <vector> #include <queue> using namespace std; vector<int> v(2e5,0),v2(2e5); struct node{ int s,l,r,add=0; node *ls,*rs; node(int lft,int rgt){ l=lft;r=rgt; if(l==r-1){ s=v[l]; }else{ ls=new node(l,(l+r)/2); rs=new node((l+r)/2,r); s=(ls->getxor(l,(l+r)/2))^(rs->getxor((l+r)/2,r)); } } int getxor(int lft,int rgt){ if(lft>=r||rgt<=l)return 0; if(lft<=l&&rgt>=r){ if(add!=0){ s^=add; add=0; ls->update(l,(l+r)/2,add); rs->update((l+r)/2,r,add); } return s; } return (ls->getxor(lft,rgt))^(rs->getxor(lft,rgt)); } int update(int lft,int rgt,int x){ if(lft>=r||rgt<=l)return s; if(lft<=l&&rgt>=r){ add=x; return (s^x); } s=(ls->update(lft,rgt,x))^(rs->update(lft,rgt,x)); return s; } }; int main(){ int n,q,a,b,t,ans; cin>>n>>q; for(int i=0;i<n;i++){ cin>>v[i+1]; v2[i+1]=v[i+1]; } node *st=new node(0,n+1); for(int i=1;i<=n;i+=2)v[i]=0; node *odd=new node(0,n+1); for(int i=1;i<=n;i+=2)v[i]=v2[i]; for(int i=0;i<=n;i++){ for(int j=1;j<=n+1-i;j++){ cout<<(odd->getxor(i,i+j))<<" "; }cout<<"\n"; } while(q--){ cin>>t>>a>>b; if(t==1){ t=b; b=b^v[a]; st->update(a,n+1,b); odd->update(a,n+1,b); v[a]=t; }else{ if((b-a)%2==0){ if(a%2==1){ cout<<(odd->getxor(a,b+1)); }else{ cout<<((odd->getxor(a,b+1))^(st->getxor(a,b+1))); } } else{ cout<<0; } cout<<"\n"; } } }
#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...