Submission #1298732

#TimeUsernameProblemLanguageResultExecution timeMemory
1298732miyamae_nonoaXORanges (eJOI19_xoranges)C++20
55 / 100
30 ms1172 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int nmax = 100005; ll a[nmax], st[4*nmax]; int n, m; void build(int id, int start, int end) { if (start == end) { st[id] = a[start]; } else { int mid = (start + end) / 2; build(2*id, start, mid); build(2*id+1, mid+1, end); st[id] = st[2*id] ^ st[2*id+1]; } } void update(int id, int start, int end, int idx, int val) { if (start == end) { st[id] = val; a[idx] = val; } else { int mid = (start + end) / 2; if (idx <= mid) update(2*id, start, mid, idx, val); else update(2*id+1, mid+1, end, idx, val); st[id] = st[2*id] ^ st[2*id+1]; } } ll query(int id, int start, int end, int l, int r) { if (r < start || end < l) return 0; if (l <= start && end <= r) return st[id]; int mid = (start + end) / 2; ll p1 = query(2*id, start, mid, l, r); ll p2 = query(2*id+1, mid+1, end, l, r); return p1 ^ p2; } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; build(1, 1, n); while (m--) { int type, x, y; cin >> type >> x >> y; if (type == 1) update(1, 1, n, x, y); else { int l = x, r = y; int ans = 0; for (int i = l; i <= r; i++) { ll cnt = (ll)(i-l+1) * (r-i+1); if (cnt % 2 == 1) ans ^= a[i]; } cout << ans << "\n"; } } }
#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...