Submission #725669

#TimeUsernameProblemLanguageResultExecution timeMemory
725669MercubytheFirstXORanges (eJOI19_xoranges)C++14
100 / 100
537 ms9936 KiB
#include<iostream> #include<vector> using namespace std; #define CDIV(a, b) (((a) + (b) - 1) / (b)) class ST{ public: int n; vector<int>t, v; ST(int sz){ n = sz; t.resize(4 * n); v.resize(n + 1); } void build(int node, int l, int r){ if(l == r){ t[node] = v[l]; return; } int mid = (l + r)/2; build(node * 2, l, mid); build(node * 2 + 1, mid + 1, r); t[node] = t[node * 2] ^ t[node * 2 + 1]; } int query(int node, int l, int r, int tl, int tr){ if(l > r or r < tl or tr < l)return 0; if(tl <= l and r <= tr){ return t[node]; } int mid = (l + r)/2; int res = query(node * 2,l, mid, tl, tr) ^ query(node * 2 + 1, mid + 1, r, tl, tr); return res; } void update(int node, int l, int r, int idx, int val){ if(l > r or r < idx or idx < l)return; if(l == r and idx == l){ t[node] = val; return; } int mid = (l + r)/2; update(node * 2, l, mid, idx, val); update(node * 2 + 1, mid + 1, r, idx, val); t[node] = t[node * 2] ^ t[node * 2 + 1]; } }; int main(){ //freopen("test.in", "r", stdin); //freopen("test.out", "w", stdout); int n, q; cin >> n >> q; int esz = n/2, osz = CDIV(n,2); ST even(esz), odd(osz); for(int i = 1; i <= n; ++i){ if(i % 2){ cin >> odd.v[i/2 + 1]; } else cin >> even.v[i/2]; } even.build(1, 1,esz); odd.build(1, 1, osz); while(q--){ int qt; cin >> qt; if(qt == 1){ int idx, val; cin >> idx >> val; if(idx % 2){ odd.update(1, 1, osz, idx/2 + 1, val); } else{ even.update(1, 1, esz, idx/2, val); } } else{ int l, r; cin >> l >> r; if((r - l + 1) % 2 == 0){ cout << 0 << endl; continue; } if(l & 1){ cout << odd.query(1, 1, osz, l/2 + 1, r/2 + 1) << endl; } else{ cout << even.query(1, 1, esz, l/2, r/2) << endl; } } } }
#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...