This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
struct segtree{
int n;
vector<int> v,l,r;
segtree(int na){
n=1<<int(ceil(log2(na)));
v.resize(2*n);
l.resize(2*n);
r.resize(2*n);
for(int i=0; i<n; i++) l[i+n]=r[i+n]=i;
for(int i=n-1; i>0; i--){
l[i]=l[2*i];
r[i]=r[2*i+1];
}
}
void set(int i, int val){
i+=n;
v[i]=val;
i/=2;
while(i){
v[i]=v[2*i]^v[2*i+1];
i/=2;
}
}
int query(int left, int right, int u=1){
if(left>r[u] || right < l[u]) return 0;
if(left<=l[u] && right >=r[u]) return v[u];
return query(left,right,2*u)^query(left,right,2*u+1);
}
};
int main(){
int n,q;
cin>>n>>q;
segtree even(n), odd(n);
for(int i=0; i<n; i++){
int t;
cin>>t;
if(i%2==0) even.set(i,t);
else odd.set(i,t);
}
for(int i=0; i<q; i++){
int t;
cin>>t;
if(t==1){
int x,y;
cin>>x>>y;
x--;
if(x%2==0) even.set(x,y);
else odd.set(x,y);
}
else{
int l,u;
cin>>l>>u;
l--;u--;
if((u-l+1)%2==0){
cout<<0<<endl;
continue;
}
if(l%2==0) cout<<even.query(l,u)<<endl;
else cout<<odd.query(l,u)<<endl;
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |