#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
using namespace std;
#define forin for(int i = 1; i <= n; i++)
#define stforin for(int i = 0; i < n; i++)
#define forim for(int i = 1; i <= m; i++)
#define forjn for(int j = 1; j <= n; j++)
#define forch(j, n) for(int i = j; i <= n; i++)
#define forch2(i, j, n) for(int i = j; i <= n; i++)
#define forjm for(int j = 1; j <= m; j++)
#define lol long long
#define lb long double
#define all(a) (x).begin(), (x).end();
#define endl '\n'
#define debug cout << "Completed" << endl;
#define fix(n, m) cout << fixed; cout.precision(m); cout << n << endl
#define pll pair<lol, lol>
#define mod 1000000007
#define fst first
#define snd second
#define inf 1e15
#define tofix cin
; string sbuf;
ostringstream buf(sbuf);
istringstream atcin(sbuf);
//priority_queue <pll, vector<pll>, greater<pll>> q
const long long N = 2e5 + 10;
lol i, t, n, j, v, a[N], b[N], k, l, r, all, tr[4*N], c, tr2[4*N];
void tree(int g, int ll, int rr) {
if (ll == rr) {
tr[g] = a[ll];
return;
}
int m = (ll + rr) / 2;
tree(2 * g + 1, ll, m);
tree(2 * g + 2, m + 1, rr);
tr[g] = tr[2 * g + 1] ^ tr[2 * g + 2];
}
long long que(int g, int ll, int rr, int l, int r) {
if (r < ll || rr < l) return 0;
if (l <= ll && rr <= r) return tr[g];
int m = (ll + rr) / 2;
return que(2 * g + 1, ll, m, l, r) ^ que(2 * g + 2, m + 1, rr, l, r);
}
void update(int g, int ll, int rr, int p, long long v) {
if (p < ll || rr < p) return;
if (ll == rr) { tr[g] = v; return; }
int m = (ll + rr) / 2;
update(2 * g + 1, ll, m, p, v);
update(2 * g + 2, m + 1, rr, p, v);
tr[g] = tr[2 * g + 1] ^ tr[2 * g + 2];
}
void tree2(int g, int ll, int rr) {
if (ll == rr) {
tr2[g] = b[ll];
return;
}
int m = (ll + rr) / 2;
tree2(2 * g + 1, ll, m);
tree2(2 * g + 2, m + 1, rr);
tr2[g] = tr2[2 * g + 1] ^ tr2[2 * g + 2];
}
long long que2(int g, int ll, int rr, int l, int r) {
if (r < ll || rr < l) return 0;
if (l <= ll && rr <= r) return tr2[g];
int m = (ll + rr) / 2;
return que2(2 * g + 1, ll, m, l, r) ^ que2(2 * g + 2, m + 1, rr, l, r);
}
void update2(int g, int ll, int rr, int p, long long v) {
if (p < ll || rr < p) return;
if (ll == rr) { tr2[g] = v; return; }
int m = (ll + rr) / 2;
update2(2 * g + 1, ll, m, p, v);
update2(2 * g + 2, m + 1, rr, p, v);
tr2[g] = tr2[2 * g + 1] ^ tr2[2 * g + 2];
}
int main() {
cin >> n >> k;
forin {
cin >> v;
if (i % 2 == 0) a[i] = v;
else b[i] = v;
}
tree(0, 1, n);
tree2(0, 1, n);
forch(1, k) {
cin >> c >> l >> r;
if (c == 2) {
if ((r - l + 1) % 2 == 0) all = 0;
else {
if(l % 2 == 0) all = que(0, 1, n, l, r);
else all = que2(0, 1, n, l, r);
}
cout << all << endl;
}
if (c == 1) {
if (l % 2 == 0) update(0, 1, n, l, r);
else update2(0, 1, n, l, r);
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |