Submission #1131671

#TimeUsernameProblemLanguageResultExecution timeMemory
1131671qrnXORanges (eJOI19_xoranges)C++20
100 / 100
110 ms28532 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; #define SPEED \ ios_base::sync_with_stdio(0); \ cin.tie(NULL); \ cout.tie(NULL); #define pb push_back #define ins insert #define fi first #define se second #define endl "\n" #define ALL(x) x.begin(), x.end() #define sz(x) x.size() #define intt long long const intt mod = 1e9 + 7; const intt base = 31; const intt inf = 1e18; const intt mxN = 3e5 + 10; vector<vector<intt>> seg(2, vector<intt>(4 * mxN, 0ll)); intt a[mxN]; void build(intt node, intt l, intt r) { if(l == r) { seg[l & 1][node] = a[l]; return; } intt mid = (l + r) / 2; build(node * 2, l, mid); build(node * 2 + 1, mid + 1, r); seg[0][node] = seg[0][node * 2] ^ seg[0][node * 2 + 1]; seg[1][node] = seg[1][node * 2] ^ seg[1][node * 2 + 1]; } void update(intt node, intt l, intt r, intt pos, intt val) { // cout << l << " " << r << endl; if(l == r) { seg[l & 1][node] = val; return; } intt mid = (l + r) / 2; if(pos <= mid) { update(node * 2, l, mid, pos, val); } else { update(node * 2 + 1, mid + 1, r, pos, val); } seg[0][node] = seg[0][node * 2] ^ seg[0][node * 2 + 1]; seg[1][node] = seg[1][node * 2] ^ seg[1][node * 2 + 1]; } intt get(intt node, intt l, intt r, intt ql, intt qr, intt init_l) { if(qr < l || ql > r) return 0; if(ql <= l && r <= qr){ return seg[init_l & 1][node]; } intt mid = (l + r) / 2; intt gg = get(node * 2, l, mid, ql, qr, init_l); intt ggg = get(node * 2 + 1, mid + 1, r, ql, qr, init_l); return gg ^ ggg; } void solve() { intt n, q; cin >> n >> q; for(intt i = 1; i <= n; i++) { cin >> a[i]; } build(1, 1, n); while(q--) { intt t, a, b; cin >> t >> a >> b; if(t == 1ll) { update(1, 1, n, a, b); } else { if(((b - a + 1) & 1) == 0) { cout << 0 << endl; continue; } cout << get(1, 1, n, a, b, a&1) << endl; } } } signed main() { SPEED; intt tst = 1; // cin >> tst; while (tst--) { solve(); } }
#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...