Submission #1219180

#TimeUsernameProblemLanguageResultExecution timeMemory
1219180giorgi123glmXORanges (eJOI19_xoranges)C++20
100 / 100
105 ms9800 KiB
#include <functional> #include <iostream> #include <vector> #include <algorithm> using namespace std; #define int long long template <typename T> class segment_tree { public: int siz = 1; vector <T> segtree; function <T(T, T)> merge; segment_tree(function <T(T, T)> IN) : merge (IN) {} void resize (int n) { while (siz < n) siz *= 2; segtree.resize (2 * siz); } void update (int ind, T K) { int u = siz + ind - 1; segtree[u] = K; u /= 2; while (u) segtree[u] = merge ( segtree[2 * u], segtree[2 * u + 1] ), u /= 2; } T get (int L, int R, int u, int l, int r) { if (r < L || R < l) return 0; if (L <= l && r <= R) return segtree[u]; const int m = (l + r) / 2; return merge ( get (L, R, 2 * u, l, m), get (L, R, 2 * u + 1, m + 1, r) ); } T get (int L, int R) { return get (L, R, 1, 1, siz); } }; signed main () { ios::sync_with_stdio (false); cin.tie (0); cout.tie (0); int N = 0, Q = 0; cin >> N >> Q; vector <segment_tree <int> > segtree ( 2, segment_tree <int> ( [](int a, int b) { return (a xor b); } ) ); segtree[0].resize (N + 100); segtree[1].resize (N + 100); for (int i = 1; i <= N; i++) { int t = 0; cin >> t; segtree[i % 2].update (i, t); } while (Q--) { int t = 0; cin >> t; if (t == 1) { int a = 0, b = 0; cin >> a >> b; segtree[a % 2].update (a, b); } else { int l = 0, r = 0; cin >> l >> r; if ((r - l + 1) % 2 == 0) cout << 0 << '\n'; else cout << segtree[r % 2].get (l, r) << '\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...