제출 #929273

#제출 시각아이디문제언어결과실행 시간메모리
929273hngrXORanges (eJOI19_xoranges)C++17
38 / 100
459 ms9612 KiB
#include <iostream> #include <vector> #include <set> #include <cstdio> #include <cmath> #include <algorithm> #include <string> #define int long long const int maxn = 2e5+7; using namespace std; const int N=2e5+5; int t[2][2*N]{0}; int a[N]{0}; int qr(int i,int l,int r,int sz,int res=0){ for(l += sz, r += sz; l < r; l >>= 1, r >>= 1){ if(l&1) res ^= t[i][l++]; if(r&1) res ^= t[i][--r]; }return res; } void upd(int i, int id, int amt, int sz){ for(id >>= 1; id; id >>= 1) t[i][id] = t[i][2*id]^t[i][2*id+1]; } int32_t main(){ int n, q; cin >> n >> q; for(int i = 0; i < n; i++) cin >> a[i]; for(int i = 0; i < n; i += 2) t[0][i+n] = a[i]; for(int i = 1; i < n; i += 2) t[1][i+n] = a[i]; for(int i = n-1; i > 0; i--) t[0][i] = t[0][2*i]^t[0][2*i+1], t[1][i]=t[1][2*i]^t[1][2*i+1]; while(q--){ int gh; cin >> gh; if(gh == 1){ int i, j; cin >> i >> j; if((i - 1)&1) upd(1, i-1, j, n); else upd(0, i-1, j, n); } else { int l, r; cin >> l >> r; if((r-l+1)%2 == 0) cout << 0 <<'\n'; else cout << qr ((l-1)%2, l-1, r, n) <<'\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...