Submission #1163902

#TimeUsernameProblemLanguageResultExecution timeMemory
1163902canhnam357XORanges (eJOI19_xoranges)C++20
100 / 100
110 ms8096 KiB
#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
#define MASK(i) (1LL << (i))
#define int long long
const int inf = 2e9;
const int mod = 3e4 + 13;
const int N = 2.5e5 + 5;
const int b = 1500;
void ckmax(int& f, int s)
{
	f = (f > s ? f : s);
}
void ckmin(int& f, int s)
{
	f = (f < s ? f : s);
}
int st[2][1 << 19] = {};
void update(int p, int pos, int val, int id = 1, int l = 1, int r = 1 << 18)
{
	if (pos < l || pos > r) return;
	if (l == r)
	{
		st[p][id] = val;
		return;
	}
	int mid = (l + r) >> 1;
	update(p, pos, val, id << 1, l, mid);
	update(p, pos, val, id << 1 | 1, mid + 1, r);
	st[p][id] = st[p][id << 1] ^ st[p][id << 1 | 1];
}
int get(int p, int u, int v, int id = 1, int l = 1, int r = 1 << 18)
{
	if (r < u || l > v) return 0;
	if (l >= u && r <= v) return st[p][id];
	int mid = (l + r) >> 1;
	return get(p, u, v, id << 1, l, mid) ^ get(p, u, v, id << 1 | 1, mid + 1, r);
}
void solve()
{
	int n, q;
	cin >> n >> q;
	for (int i = 1; i <= n; i++)
	{
		int x;
		cin >> x;
		update(i & 1, i, x);
	}
	while (q--)
	{
		int t, l, r;
		cin >> t >> l >> r;
		if (t == 1) update(l & 1, l, r);
		else
		{
			if ((r - l) % 2)
			{
				cout << 0 << '\n';
				continue;
			}
			int p = 1;
			if (l % 2 == 0) p ^= 1;
			cout << get(p, l, r) << '\n';
		}
	}
}
int32_t main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	int t = 1;
	while (t--) solve();
	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...