Submission #1245279

#TimeUsernameProblemLanguageResultExecution timeMemory
1245279kchu_zXORanges (eJOI19_xoranges)C++20
100 / 100
104 ms4440 KiB
#include <bits/stdc++.h> using namespace std; int a[100001][2], segment[400001][2]; int build(int idx, int l, int r, int s) { if (l == r) return segment[idx][s] = a[l][s]; int m = (l + r) / 2; return segment[idx][s] = build(2 * idx, l, m, s) ^ build(2 * idx + 1, m + 1, r, s); } int query(int idx, int l, int r, int ql, int qr, int s) { if (qr < l || r < ql) return 0; if (ql <= l && r <= qr) return segment[idx][s]; int m = (l + r) / 2; return query(2 * idx, l, m, ql, qr, s) ^ query(2 * idx + 1, m + 1, r, ql, qr, s); } int update(int idx, int l, int r, int pos, int val, int s) { if (pos < l || r < pos) return segment[idx][s]; if (l == r) return segment[idx][s] = val; int m = (l + r) / 2; return segment[idx][s] = update(2 * idx, l, m, pos, val, s) ^ update(2 * idx + 1, m + 1, r, pos, val, s); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, q; cin >> n >> q; for (int i = 1; i <= n; i++) { cin >> a[(i + 1) / 2][i % 2]; } build(1, 1, n / 2, 0); build(1, 1, n / 2 + n % 2, 1); while (q--) { int t, l, r; cin >> t >> l >> r; if (t == 1) { update(1, 1, n / 2 + (n % 2) * (l % 2), (l + 1) / 2, r, l % 2); } else { if ((r - l + 1) % 2 == 0) cout << 0 << '\n'; else cout << query(1, 1, n / 2 + (n % 2) * (l % 2), (l + 1) / 2, (r + 1) / 2, l % 2) << '\n'; } } 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...