Submission #1219192

#TimeUsernameProblemLanguageResultExecution timeMemory
1219192matereXORanges (eJOI19_xoranges)C++20
100 / 100
341 ms6492 KiB
#include<bits/stdc++.h>
using namespace std;
int tree[800005][2],a[200005];
void add(int v,int tl,int tr,int ind,int val){
    if(tl==tr){
        tree[v][ind%2]=val;
        tree[v][1-ind%2]=0;
        return;
    }
    int mid=(tl+tr)/2;
    if(ind<=mid) add(v*2,tl,mid,ind,val);
    else add(v*2+1,mid+1,tr,ind,val);
    tree[v][0]=tree[v*2][0]^tree[v*2+1][0];
    tree[v][1]=tree[v*2][1]^tree[v*2+1][1];
}
int sum(int v,int tl,int tr,int l,int r,int par){
    if(l<=tl and tr<=r){
        return tree[v][par];
    }
    int mid=(tl+tr)/2;
    int ans=0;
    if(l<=mid) ans^=sum(v*2,tl,mid,l,r,par);
    if(r>mid) ans^=sum(v*2+1,mid+1,tr,l,r,par);
    return ans;
}
int main(){
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        add(1,1,n,i,a[i]);
    }
    for(int i=1;i<=q;i++){
        int t,l,r;
        cin>>t;
        if(t==2){
            cin>>l>>r;
            if((r-l+1)%2==0) cout<<0<<endl;
            else cout<<sum(1,1,n,l,r,r%2)<<endl;
        }
        else{
            cin>>l>>r;
            add(1,1,n,l,r);
        }
    }
}
#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...