Submission #1143497

#TimeUsernameProblemLanguageResultExecution timeMemory
1143497fryingducXORanges (eJOI19_xoranges)C++20
100 / 100
83 ms8560 KiB
#include "bits/stdc++.h" using namespace std; #ifdef duc_debug #include "bits/debug.h" #else #define debug(...) #endif const int maxn = 2e5 + 5; int n, a[maxn]; int q; struct segment_tree { vector<int> tree; segment_tree() {} segment_tree(int n) : tree(n * 4 + 6) {} void update(int pos, int val, int ind = 1, int l = 1, int r = n) { if(l == r) { tree[ind] = val; return; } int mid = (l + r) >> 1; if(pos <= mid) update(pos, val, ind << 1, l, mid); else update(pos, val, ind << 1 | 1, mid + 1, r); tree[ind] = tree[ind << 1] ^ tree[ind << 1 | 1]; } int get(int x, int y, int ind = 1, int l = 1, int r = n) { if(l > y || r < x) return 0; if(x <= l and r <= y) { return tree[ind]; } int mid = (l + r) >> 1; return get(x, y, ind << 1, l, mid) ^ get(x, y, ind << 1 | 1, mid + 1, r); } } st[2]; void solve() { cin >> n >> q; st[0] = st[1] = segment_tree(n); for(int i = 1; i <= n; ++i) { cin >> a[i]; st[i & 1].update(i, a[i]); } while(q--) { int op; cin >> op; if(op == 1) { int pos, val; cin >> pos >> val; st[pos & 1].update(pos, val); } else { int l, r; cin >> l >> r; if((l + r) & 1) { cout << 0 << '\n'; continue; } cout << st[l & 1].get(l, r) << '\n'; } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); 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...