#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct FenwickXor {
    int n;
    vector<ll> bit;
    FenwickXor(int n=0){ init(n); }
    void init(int _n){
        n = _n;
        bit.assign(n+1, 0);
    }
    // apply xor with val at position idx
    void update(int idx, ll val){
        for(; idx <= n; idx += idx & -idx) bit[idx] ^= val;
    }
    // prefix xor [1..idx]
    ll query(int idx){
        ll res = 0;
        for(; idx > 0; idx -= idx & -idx) res ^= bit[idx];
        return res;
    }
    // range xor [l..r]
    ll range_query(int l, int r){
        if(l>r) return 0;
        return query(r) ^ query(l-1);
    }
};
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    if(!(cin >> n >> m)) return 0;
    vector<ll> a(n+1);
    for(int i=1;i<=n;i++) cin >> a[i];
    FenwickXor bitOdd(n), bitEven(n);
    // parity: i%2==1 -> odd, i%2==0 -> even
    for(int i=1;i<=n;i++){
        if(i%2==1) bitOdd.update(i, a[i]);
        else bitEven.update(i, a[i]);
    }
    while(m--){
        int type; cin >> type;
        if(type == 1){
            int idx; ll val; cin >> idx >> val;
            ll delta = a[idx] ^ val; // value to xor into Fenwick
            if(delta != 0){
                if(idx % 2 == 1) bitOdd.update(idx, delta);
                else bitEven.update(idx, delta);
                a[idx] = val;
            } else {
                a[idx] = val; // vẫn cập nhật mảng (mặc dù không thay đổi tree)
            }
        } else if(type == 2){
            int l, r; cin >> l >> r;
            if( (l % 2) != (r % 2) ){
                cout << 0 << '\n';
            } else {
                if(l % 2 == 1){
                    cout << bitOdd.range_query(l, r) << '\n';
                } else {
                    cout << bitEven.range_query(l, r) << '\n';
                }
            }
        }
    }
    return 0;
}
| # | 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... |