Submission #1173592

#TimeUsernameProblemLanguageResultExecution timeMemory
1173592andriy57XORanges (eJOI19_xoranges)C++20
100 / 100
318 ms12976 KiB
#define _CRT_SECURE_NO_WARNINGS #include <bits/stdc++.h> using namespace std; #define forin for(int i = 1; i <= n; i++) #define stforin for(int i = 0; i < n; i++) #define forim for(int i = 1; i <= m; i++) #define forjn for(int j = 1; j <= n; j++) #define forch(j, n) for(int i = j; i <= n; i++) #define forch2(i, j, n) for(int i = j; i <= n; i++) #define forjm for(int j = 1; j <= m; j++) #define lol long long #define lb long double #define all(a) (x).begin(), (x).end(); #define endl '\n' #define debug cout << "Completed" << endl; #define fix(n, m) cout << fixed; cout.precision(m); cout << n << endl #define pll pair<lol, lol> #define mod 1000000007 #define fst first #define snd second #define inf 1e15 #define tofix cin ; string sbuf; ostringstream buf(sbuf); istringstream atcin(sbuf); //priority_queue <pll, vector<pll>, greater<pll>> q const long long N = 2e5 + 10; lol i, t, n, j, v, a[N], b[N], k, l, r, all, tr[4*N], c, tr2[4*N]; void tree(int g, int ll, int rr) { if (ll == rr) { tr[g] = a[ll]; return; } int m = (ll + rr) / 2; tree(2 * g + 1, ll, m); tree(2 * g + 2, m + 1, rr); tr[g] = tr[2 * g + 1] ^ tr[2 * g + 2]; } long long que(int g, int ll, int rr, int l, int r) { if (r < ll || rr < l) return 0; if (l <= ll && rr <= r) return tr[g]; int m = (ll + rr) / 2; return que(2 * g + 1, ll, m, l, r) ^ que(2 * g + 2, m + 1, rr, l, r); } void update(int g, int ll, int rr, int p, long long v) { if (p < ll || rr < p) return; if (ll == rr) { tr[g] = v; return; } int m = (ll + rr) / 2; update(2 * g + 1, ll, m, p, v); update(2 * g + 2, m + 1, rr, p, v); tr[g] = tr[2 * g + 1] ^ tr[2 * g + 2]; } void tree2(int g, int ll, int rr) { if (ll == rr) { tr2[g] = b[ll]; return; } int m = (ll + rr) / 2; tree2(2 * g + 1, ll, m); tree2(2 * g + 2, m + 1, rr); tr2[g] = tr2[2 * g + 1] ^ tr2[2 * g + 2]; } long long que2(int g, int ll, int rr, int l, int r) { if (r < ll || rr < l) return 0; if (l <= ll && rr <= r) return tr2[g]; int m = (ll + rr) / 2; return que2(2 * g + 1, ll, m, l, r) ^ que2(2 * g + 2, m + 1, rr, l, r); } void update2(int g, int ll, int rr, int p, long long v) { if (p < ll || rr < p) return; if (ll == rr) { tr2[g] = v; return; } int m = (ll + rr) / 2; update2(2 * g + 1, ll, m, p, v); update2(2 * g + 2, m + 1, rr, p, v); tr2[g] = tr2[2 * g + 1] ^ tr2[2 * g + 2]; } int main() { cin >> n >> k; forin { cin >> v; if (i % 2 == 0) a[i] = v; else b[i] = v; } tree(0, 1, n); tree2(0, 1, n); forch(1, k) { cin >> c >> l >> r; if (c == 2) { if ((r - l + 1) % 2 == 0) all = 0; else { if(l % 2 == 0) all = que(0, 1, n, l, r); else all = que2(0, 1, n, l, r); } cout << all << endl; } if (c == 1) { if (l % 2 == 0) update(0, 1, n, l, r); else update2(0, 1, n, l, r); } } 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...