Submission #779258

#TimeUsernameProblemLanguageResultExecution timeMemory
779258vmanzXORanges (eJOI19_xoranges)C++14
100 / 100
412 ms8644 KiB
#include <iostream> #include <vector> using namespace std; void actual(vector<int> &aib, int p, int nou, int vechi) { int n = (int)aib.size() - 1; while (p <= n) { aib[p] ^= vechi; aib[p] ^= nou; p += (p & -p); } } int interogare(vector<int> &aib, int p) { int rez = 0; while (p != 0) { rez ^= aib[p]; p -= (p & -p); } return rez; } /* void scrie_aib(vector<int> &aib) { int n = (int)aib.size() - 1; for (int i = 1; i <= n; i++) { cout << i << ":\t" << aib[i] << "\n"; } cout << "\n"; } */ int main() { int n, q; cin >> n >> q; vector <int> v(n+1), aib_par(n+1, 0), aib_impar(n+1, 0); for (int i = 1; i <= n; i++) { cin >> v[i]; if (i % 2 == 0) { actual(aib_par, i, v[i], 0); } else { actual(aib_impar, i, v[i], 0); } } //scrie_aib(aib_par); //scrie_aib(aib_impar); for (int i = 0; i < q; i++) { int tip; cin >> tip; if (tip == 1) { int poz, val_nou; cin >> poz >> val_nou; if (poz % 2 == 0) { actual(aib_par, poz, val_nou, v[poz]); v[poz] = val_nou; //scrie_aib(aib_par); } else { actual(aib_impar, poz, val_nou, v[poz]); v[poz] = val_nou; //scrie_aib(aib_impar); } } else { int st, dr; cin >> st >> dr; int rez = 0; if ((dr - st + 1) % 2 == 0) { cout << rez << "\n"; } else { if (st % 2 == 0) { rez = (interogare(aib_par, dr) ^ interogare(aib_par, st - 1)); } else { rez = (interogare(aib_impar, dr) ^ interogare(aib_impar, st - 1)); } cout << rez << "\n"; } } } 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...