Submission #1178144

#TimeUsernameProblemLanguageResultExecution timeMemory
1178144ereringXORanges (eJOI19_xoranges)C++20
100 / 100
208 ms5544 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int N=(1<<18),inf=2e9,MOD=1e9+7;
int seg[N*2][2],a[N],offset=1,qlo,qhi,type;
void update(int idx,int val){
    idx+=offset;
    seg[idx][type]=val;
    idx/=2;
    while(idx>0){
        seg[idx][type]=(seg[idx*2][type]^seg[idx*2+1][type]);
        idx/=2;
    }
}
int query(int node,int lo,int hi){
    if(lo>=qlo && hi<=qhi)return seg[node][type];
    if(lo>qhi || hi<qlo)return 0;
    int mid=(lo+hi)/2;
    return (query(node*2,lo,mid)^query(node*2+1,mid+1,hi));
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n,q; cin>>n>>q;
    while(offset<n)offset*=2;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        type=i%2;
        update(i,a[i]);
    }
    while(q--){
        int t,l,r; cin>>t>>l>>r;
        type=l%2; qlo=l; qhi=r;
        if(t==1)update(l,r);
        else{
            if((r-l)%2)cout<<0<<endl;
            else cout<<query(1,0,offset-1)<<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...