Submission #1219293

#TimeUsernameProblemLanguageResultExecution timeMemory
1219293mariamtsagareliXORanges (eJOI19_xoranges)C++20
100 / 100
56 ms4364 KiB
#include <bits/stdc++.h>
using namespace std;
using ui = unsigned int;

struct f1{
    int n;
    vector<ui> f;
    f1(int _n): n(_n), f(n+1, 0) {}
    void upd(int i, ui v) {
        for (; i <= n; i += i & -i)
            f[i] ^= v;
    }
    ui qry(int i) {
        ui s = 0;
        for (; i > 0; i -= i & -i)
            s ^= f[i];
        return s;
    }
    ui range(int l, int r) {
        return qry(r) ^ qry(l - 1);
    }
};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, q;
    cin >> n >> q;
    vector<ui> a(n+1);
    for(int i = 1; i <= n; i++)
        cin >> a[i];

    f1 odd(n), even(n);
    for(int i = 1; i <= n; i++){
        if(i & 1) odd.upd(i, a[i]);
        else      even.upd(i, a[i]);
    }

    while(q--){
        int t;
        cin >> t;
        if(t == 1){
            int i; ui x;
            cin >> i >> x;
            ui old = a[i];
            if(i & 1) odd.upd(i, old ^ x);
            else      even.upd(i, old ^ x);
            a[i] = x;
        } else {
            int l, r;
            cin >> l >> r;
            int len = r - l + 1;
            if((len & 1) == 0){
                cout << 0u << "\n";
            } else if(l & 1){
                cout << odd.range(l, r) << "\n";
            } else {
                cout << even.range(l, r) << "\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...