제출 #464339

#제출 시각아이디문제언어결과실행 시간메모리
464339amunduzbaevXORanges (eJOI19_xoranges)C++14
100 / 100
194 ms9044 KiB
#include "bits/stdc++.h" using namespace std; const int n = 2e5; struct ST{ vector<int> tree; void init(){ tree.resize(4 * n); } void sett(int i, int v, int lx = 0, int rx = n, int x = 1){ //~ cout<<lx<<" "<<rx<<" "<<x<<" "<<(int)tree.size()<<endl; if(lx == rx) { tree[x] = v; return; } int m = (lx + rx)>>1; if(i <= m) sett(i, v, lx, m, x<<1); else sett(i, v, m+1, rx, x<<1|1); tree[x] = tree[x<<1] ^ tree[x<<1|1]; } int get(int l, int r, int lx = 0, int rx = n, int x = 1){ if(lx > r || rx < l) return 0; if(lx >= l && rx <= r) return tree[x]; int m = (lx + rx)>>1; return (get(l, r, lx, m, x<<1) ^ get(l, r, m+1, rx, x<<1|1)); } }; void solve(){ int n, q; cin>>n>>q; vector<int> a(n); array<ST, 2> tree; tree[0].init(), tree[1].init(); for(int i=0;i<n;i++){ cin>>a[i]; tree[i&1].sett(i, a[i]); } while(q--){ int t; cin>>t; if(t == 1){ int i, v; cin>>i>>v, i--; tree[i&1].sett(i, v); } else { int l, r; cin>>l>>r, l--, r--; if((r - l + 1) & 1) cout<<tree[l&1].get(l, r)<<"\n"; else cout<<0<<"\n"; } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t = 1; //~ cin>>t; while(t--) solve(); }
#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...