Submission #1219164

#TimeUsernameProblemLanguageResultExecution timeMemory
1219164giorgi123glmXORanges (eJOI19_xoranges)C++20
0 / 100
128 ms6484 KiB
#include <functional> #include <iostream> #include <vector> #include <algorithm> using namespace std; 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 T(); 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); } }; int 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 ^ b; } ) ); segtree[0].resize (N + 1); segtree[1].resize (N + 1); 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; cout << ( segtree[(r - l + l) % 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...