#include <bits/stdc++.h>
#define int long long
#define pb push_back
#define fs first
#define sc second
using namespace std;
const int N = 2e5 + 5;
int a[N], seg1[4 * N], seg2[4 * N];
void upd1(int k, int l, int r, int i, int v){
if(l + 1 == r){
seg1[k] = a[l] = v;
return;
}
int m = (l + r) / 2;
if(i < m){
upd1(k * 2 + 1, l, m, i, v);
}else{
upd1(k * 2 + 2, m, r, i, v);
}
seg1[k] = seg1[k * 2 + 1] ^ seg1[k * 2 + 2];
}
void upd2(int k, int l, int r, int i, int v){
if(l + 1 == r){
seg2[k] = a[l] = v;
return;
}
int m = (l + r) / 2;
if(i < m){
upd2(k * 2 + 1, l, m, i, v);
}else{
upd2(k * 2 + 2, m, r, i, v);
}
seg2[k] = seg2[k * 2 + 1] ^ seg2[k * 2 + 2];
}
int get1(int k, int l, int r, int s, int e){
if(l >= e or r <= s){
return 0;
}
if(l >= s and r <= e){
return seg1[k];
}
int m = (l + r) / 2;
return get1(k * 2 + 1, l, m, s, e) ^ get1(k * 2 + 2, m, r, s, e);
}
int get2(int k, int l, int r, int s, int e){
if(l >= e or r <= s){
return 0;
}
if(l >= s and r <= e){
return seg2[k];
}
int m = (l + r) / 2;
return get2(k * 2 + 1, l, m, s, e) ^ get2(k * 2 + 2, m, r, s, e);
}
signed main(){
int n, q;
cin >> n >> q;
for(int i = 0; i < n; i++){
cin >> a[i];
}
for(int i = 0; i < n; i++){
if(i % 2 == 0){
upd1(0, 0, n, i, a[i]);
}else{
upd2(0, 0, n, i, a[i]);
}
}
while(q--){
int tp;
cin >> tp;
if(tp == 2){
int l, r;
cin >> l >> r;
if((r - l + 1) % 2 == 0){
cout << 0 << endl;
continue;
}
l--, r--;
if(l % 2 == 0){
cout << get1(0, 0, n, l, r + 1) << endl;
}else{
cout << get2(0, 0, n, l, r + 1) << endl;
}
}else{
int l, v;
cin >> l >> v;
l--;
if(l % 2 == 0){
upd1(0, 0, n, l, v);
}else{
upd2(0, 0, n, l, v);
}
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |