제출 #464339

#제출 시각아이디문제언어결과실행 시간메모리
464339amunduzbaevXORanges (eJOI19_xoranges)C++14
100 / 100
194 ms9044 KiB
#include "bits/stdc++.h"
using namespace std;

const int n = 2e5;

struct ST{
	vector<int> tree;
	void init(){
		tree.resize(4 * n);
	}
	
	void sett(int i, int v, int lx = 0, int rx = n, int x = 1){
		//~ cout<<lx<<" "<<rx<<" "<<x<<" "<<(int)tree.size()<<endl;
		if(lx == rx) { tree[x] = v; return; }
		int m = (lx + rx)>>1;
		if(i <= m) sett(i, v, lx, m, x<<1);
		else sett(i, v, m+1, rx, x<<1|1);
		tree[x] = tree[x<<1] ^ tree[x<<1|1];
	} 
	
	int get(int l, int r, int lx = 0, int rx = n, int x = 1){
		if(lx > r || rx < l) return 0;
		if(lx >= l && rx <= r) return tree[x];
		int m = (lx + rx)>>1;
		return (get(l, r, lx, m, x<<1) ^ get(l, r, m+1, rx, x<<1|1));
	}
};

void solve(){
	int n, q; cin>>n>>q;
	vector<int> a(n);
	array<ST, 2> tree;
	tree[0].init(), tree[1].init();
	
	for(int i=0;i<n;i++){
		cin>>a[i];
		tree[i&1].sett(i, a[i]);
	}
	
	while(q--){
		int t; cin>>t;
		if(t == 1){
			int i, v; cin>>i>>v, i--;
			tree[i&1].sett(i, v);
		} else {
			int l, r; cin>>l>>r, l--, r--;
			if((r - l + 1) & 1) cout<<tree[l&1].get(l, r)<<"\n";
			else cout<<0<<"\n";
		}
	}
}

signed main(){
	ios_base::sync_with_stdio(0); cin.tie(0);
	int t = 1;
	//~ cin>>t;
	while(t--) solve();
}
#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...