Submission #1272857

#TimeUsernameProblemLanguageResultExecution timeMemory
1272857batsukh2006XORanges (eJOI19_xoranges)C++20
100 / 100
136 ms15672 KiB
#include<iostream>
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<deque>
#include<stack>
#include<string>
#include<math.h>
#include<vector>
#include<stdio.h>
#include<utility>
#include<iomanip>
#include<string.h>
#include<limits.h>
#include<algorithm>
#include<functional>
#include<unordered_map>
using namespace std;
#pragma GCC target("popcnt")
#define MOD 1000000007
#define int long long
#define ss second
#define ff first
#define endl '\n'
const int mxN=2e5+1;
vector<int> tree1(4*mxN),tree2(4*mxN);
void up1(int node, int l, int r, int p, int v){
    if(l>=p&&p>=r){
        tree1[node]=v;
    }else if(l>p||r<p){
        return;
    }else{
        up1(node*2,l,(l+r)/2,p,v);
        up1(node*2+1,(l+r)/2+1,r,p,v);
        tree1[node]=(tree1[node*2]^tree1[node*2+1]);
    }
}
void up2(int node, int l, int r, int p, int v){
    if(l>=p&&p>=r){
        tree2[node]=v;
    }else if(l>p||r<p){
        return;
    }else{
        up2(node*2,l,(l+r)/2,p,v);
        up2(node*2+1,(l+r)/2+1,r,p,v);
        tree2[node]=(tree2[node*2]^tree2[node*2+1]);
    }
}
int cal1(int node, int l, int r, int L, int R){
    if(L<=l&&r<=R){
        return tree1[node];
    }else if(l>R||r<L){
        return 0;
    }else{
        return (cal1(node*2,l,(l+r)/2,L,R)^cal1(node*2+1,(l+r)/2+1,r,L,R));
    }
}
int cal2(int node, int l, int r, int L, int R){
    if(L<=l&&r<=R){
        return tree2[node];
    }else if(l>R||r<L){
        return 0;
    }else{
        return (cal2(node*2,l,(l+r)/2,L,R)^cal2(node*2+1,(l+r)/2+1,r,L,R));
    }
}
void solve(){
    int n,q; cin>>n>>q;
    vector<int> a(n+1);
    for(int i=1; i<=n; i++){
        cin>>a[i];
        if(i%2){
            up1(1,1,n,i,a[i]);
        }else{
            up2(1,1,n,i,a[i]);
        }
    }
    while(q--){
        int t; cin>>t;
        if(t==1){
            int i,v; cin>>i>>v;
            if(i%2){
                up1(1,1,n,i,v);
            }else{
                up2(1,1,n,i,v);
            }
        }else{
            int l,r; cin>>l>>r;
            if((r-l+1)%2){
                if(l%2){
                    cout<<cal1(1,1,n,l,r)<<endl;
                }else{
                    cout<<cal2(1,1,n,l,r)<<endl;
                }
            }else{
                cout<<0<<endl;
            }
        }
    }
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	int T=1;
	// cin>>T;
	while(T--){
		solve();
		cout<<endl;
	}
	return 0;
}
#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...