Submission #1149579

#TimeUsernameProblemLanguageResultExecution timeMemory
1149579ChocoXORanges (eJOI19_xoranges)C++20
100 / 100
219 ms15628 KiB
#include<bits/stdc++.h>
using namespace std;
#define Study ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define ll long long
#define ull unsigned long long
#define pb push_back
#define ff first 
#define ss second
#define ins insert
#define all(x) x.begin(),x.end()
#define fori(x,y,z) for(ll x=y;x<=z;x++)
const ll INF=1e9;
const ll sz=2e5+10;
const ll mod=1e9;
vector<ll>a(sz),cut(4*sz,0),tek(4*sz,0);
void build(ll v,ll l,ll r){
    if(l==r){
        if(l%2==0)
        cut[v]=a[l];
        else{
        tek[v]=a[l];
        //cout<<"HAI"<<v<<endl;
        }
        return;
    }
    ll mid=(l+r)>>1;
    build(v<<1,l,mid);
    build(v<<1|1,mid+1,r);
    tek[v]=tek[v<<1]^tek[v<<1|1];
    cut[v]=cut[v<<1]^cut[v<<1|1];
}
void update(ll v,ll l,ll r,ll pos,ll val){
    if(l==r){
        if(l%2)
        tek[v]=val;
        else
        cut[v]=val;
        return;
    }
    ll mid=(l+r)>>1;
    if(pos<=mid)
    update(v<<1,l,mid,pos,val);
    else
    update(v<<1|1,mid+1,r,pos,val);
    cut[v]=cut[v<<1]^cut[v<<1|1];
    tek[v]=tek[v<<1]^tek[v<<1|1];
}
ll query(ll v,ll l,ll r,ll tl,ll tr,ll st){
    if(l>tr || r<tl)
    return 0;
    if(l>=tl && r<=tr)
    return (st) ? tek[v] : cut[v];
    ll mid=(l+r)>>1;
    return query(v<<1,l,mid,tl,tr,st)^query(v<<1|1,mid+1,r,tl,tr,st);
}
void work(){
    ll n,q;
    cin>>n>>q;
    fori(i,1,n){
        cin>>a[i];
    }
    build(1,1,n);
    while(q--){
        ll t;
        cin>>t;
        if(t==1){
            ll pos,val;
            cin>>pos>>val;
            update(1,1,n,pos,val);
        }
        else{
            ll l,r;
            cin>>l>>r;
            if((r-l+1)%2==0){
                cout<<0<<endl;
                continue;
            }
            if(l%2)
            cout<<query(1,1,n,l,r,1)<<endl;
            else
            cout<<query(1,1,n,l,r,0)<<endl;
        }
    }
}
int main(){
    Study;
    ll t=1;
    //cin>>t;
    while(t--){
        work();
    }
}
/*
62->legendary grandmaster   0.01%
313->International grandmaster  0.05%
737->Grandmaster 0.12%
1021->International master 0.17%
2859->Master 0.47%
5374->Candidate Master 0.89%
14429->Expert 2.40%  ~~ !Goal till summer!! ~~
26668->Specialist  4.44% //skip here >:D
46695->Pupil  7.78% ~~ you are here !! ~~
600,000 user var cfde 
*/
#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...