Submission #1219220

#TimeUsernameProblemLanguageResultExecution timeMemory
1219220lukasuliashviliXORanges (eJOI19_xoranges)C++20
100 / 100
392 ms11332 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define rep(i,a,b) for(int i=a; i<=b; i++) const int N=2*1e6+5; int seg[4*N],seg2[4*N],a[N]; void update(int node ,int l,int r, int idx, int u){ if(l==r){ seg[node]=u; return ; } int m=(l+r)/2; if(m>=idx){ update(2*node,l,m,idx,u); } else{ update(2*node+1,m+1,r,idx,u); } seg[node]=seg[2*node]^seg[2*node+1]; } void update2(int node ,int l,int r, int idx, int u){ if(l==r){ seg2[node]=u; return ; } int m=(l+r)/2; if(m>=idx){ update2(2*node,l,m,idx,u); } else{ update2(2*node+1,m+1,r,idx,u); } seg2[node]=seg2[2*node]^seg2[2*node+1]; } int get(int node, int l, int r,int s , int e){ if(l>e or r<s){ return 0; } if(l>=s and r<=e){ return seg[node]; } int m=(l+r)/2; int val1=get(2*node,l,m,s,e); int val2=get(2*node+1,m+1,r,s,e); return val1^val2; } int get1(int node, int l, int r,int s , int e){ if(l>e or r<s){ return 0; } if(l>=s and r<=e){ return seg2[node]; } int m=(l+r)/2; int val1=get1(2*node,l,m,s,e); int val2=get1(2*node+1,m+1,r,s,e); return val1^val2; } signed main(){ int n, q;cin>>n>>q; rep(i,1,n){ cin>>a[i]; update(1,1,n,i,a[i]); if(i%2==1) update2(1,1,n,i,a[i]); } rep(i,1,q){ int type;cin>>type; if(type==2){ int l,r;cin>>l>>r; if((r-l+1)%2==0){ cout<<0<<endl; } else{ int val1=get(1,1,n,l,r); int val2=get1(1,1,n,l,r); if(l%2==1){ cout<<val2<<endl; } else{ cout<<(val1^val2)<<endl; } } } else{ int l,u;cin>>l>>u; update(1,1,n,l,u); if(l%2==1) update2(1,1,n,l,u); } } }
#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...