Submission #838480

#TimeUsernameProblemLanguageResultExecution timeMemory
838480BlockOGXORanges (eJOI19_xoranges)C++14
100 / 100
271 ms8416 KiB
#include <iostream>

using namespace std;

unsigned int o[200000], b1[200001], b2[200001];

unsigned int bxor(unsigned int b[200001], int i) {
    i++; unsigned int res = 0;
    while (i > 0) {
        res ^= b[i];
        i -= i & (-i);
    }
    return res;
}

void bchg(unsigned int b[200001], int i, unsigned int c) {
    i++; while (i <= 200000) {
        b[i] ^= c;
        i += i & (-i);
    }
}

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

    int n, q; cin >> n >> q;
    for (int i = 0; i < n; i++) {
        cin >> o[i];
        bchg(i & 1 ? b2 : b1, i, o[i]);
    }

    for (int it = 0; it < q; it++) {
        int code; cin >> code;
        if (code == 1) {
            int i; unsigned int j; cin >> i >> j; i--;
            bchg(i & 1 ? b2 : b1, i, j ^ o[i]);
            o[i] = j;
        } else {
            int l, u; cin >> l >> u;
            if (!((u - l + 1) & 1)) {
                cout << 0 << endl;
                continue;
            }

            cout << (bxor(l & 1 ? b1 : b2, l - 2) ^ bxor(l & 1 ? b1 : b2, u - 1)) << endl;
        }
    }
}
#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...