Submission #1322649

#TimeUsernameProblemLanguageResultExecution timeMemory
1322649Hamed_GhaffariXORanges (eJOI19_xoranges)C++20
100 / 100
84 ms6524 KiB
#include <bits/stdc++.h>
using namespace std;

#define lc id<<1
#define rc lc|1
#define mid ((l+r)>>1)

const int MXN = 2e5+5;

int n, a[MXN];

struct {
    int seg[MXN<<2];
    void upd(int i, int x, int l=1, int r=n+1, int id=1) {
        if(r-l == 1) {
            seg[id] = x;
            return;
        }
        i<mid ? upd(i, x, l, mid, lc) : upd(i, x, mid, r, rc);
        seg[id] = seg[lc]^seg[rc];
    }
    int get(int s, int e, int l=1, int r=n+1, int id=1) {
        if(s>=r || l>=e) return 0;
        if(s<=l && r<=e) return seg[id];
        return get(s, e, l, mid, lc) ^ get(s, e, mid, r, rc);
    }
} seg[2];

int q;

int32_t main() {
    cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
    cin >> n >> q;
    for(int i=1; i<=n; i++) {
        cin >> a[i];
        seg[i&1].upd(i, a[i]);
    }
    while(q--) {
        int t;
        cin >> t;
        if(t==1) {
            int i, x;
            cin >> i >> x;
            seg[i&1].upd(i, x);
        }
        else {
            int l, r;
            cin >> l >> r;
            cout << ((l&1)==(r&1) ? seg[l&1].get(l, r+1) : 0) << '\n';
        }
    }
    return 0;
}
#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...