제출 #446781

#제출 시각아이디문제언어결과실행 시간메모리
446781fuad27XORanges (eJOI19_xoranges)C++14
38 / 100
676 ms6252 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct fenwick {
	int v[200010] = {0};
	void update(int i, int val) {
		i++;
		while(i < 200010) {
			v[i] ^= val;
			i += i&(-i);
		}
	}
	int getXor(int i) {
		int x = 0;
		while(i > 0) {
			x ^= v[i];
			i -= i & (-i);
		}
		return x;
	}
};
int32_t main () {
	int n, q;
	cin >> n >> q;
	vector<int> v(n, 0);
	fenwick x;
	fenwick xodd;
	for(int i = 0;i<n;i++) {
		int p;
		cin >> p;
		v[i] = p;
		x.update(i, p);
		if(i%2 == 0) {
			xodd.update(i, p);
		}
	} while(q--) {
		int k;
		cin >> k;
		if(k == 1) {
			int i, val;
			cin >> i >> val;
			x.update(i, val ^ v[i-1]);
			if(i%2 == 1) {
				xodd.update(i, val ^ v[i-1]);
			}
			v[i-1] = val;
		}
		else {
			int l, u;
			cin >> l >> u;
			if((u - l)%2 == 0) {
				if(l%2 == 1) {
					int ans = xodd.getXor(u) ^ xodd.getXor(l-1);cout<<ans<<endl;
				}
				else {
					int ans = x.getXor(u) ^ xodd.getXor(u) ^ x.getXor(l-1) ^ xodd.getXor(l-1);cout<<ans<<endl;
 
				}
			}
			else {
				cout<<0<<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...