Submission #1246300

#TimeUsernameProblemLanguageResultExecution timeMemory
1246300wedonttalkanymoreXORanges (eJOI19_xoranges)C++20
100 / 100
142 ms15700 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int long long const ll N = 2e5 + 5; int n, q; int a[N]; struct ST { vector<int> st; ST(int _n) { st.assign(4 * _n, 0); } void update(int i, int l, int r, int pos, int val) { if (l == r) { st[i] = val; return; } int mid = (l + r) / 2; if (pos <= mid) update(2 * i, l, mid, pos, val); else update(2 * i + 1, mid + 1, r, pos, val); st[i] = st[2 * i] ^ st[2 * i + 1]; } int get(int i, int l, int r, int u, int v) { if (u > r || v < l) return 0; if (u <= l && r <= v) return st[i]; int mid = (l + r) / 2; return get(2 * i, l, mid, u, v) ^ get(2 * i + 1, mid + 1, r, u, v); } }; signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> q; for (int i = 1; i <= n; i++) cin >> a[i]; ST st_even(n), st_odd(n); for (int i = 1; i <= n; i++) { if (i % 2 == 0) st_even.update(1, 1, n, i, a[i]); else st_odd.update(1, 1, n, i, a[i]); } while (q--) { int type, l, r; cin >> type >> l >> r; if (type == 1) { a[l] = r; if (l % 2 == 0) st_even.update(1, 1, n, l, r); else st_odd.update(1, 1, n, l, r); } else { int len = r - l + 1; if (len % 2 == 0) { cout << 0 << '\n'; } else { if (l % 2 == 0) cout << st_even.get(1, 1, n, l, r) << '\n'; else cout << st_odd.get(1, 1, n, l, r) << '\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...