Submission #838486

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

using namespace std;

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

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

void bchg(unsigned int b[100001], int n, int i, unsigned int c) {
    i++; while (i <= (n + 1) / 2) {
        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, n, i / 2, 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, n, i / 2, j ^ o[i]);
            o[i] = j;
        } else {
            int l, u; cin >> l >> u;
            if (!((u-- - --l) & 1)) {
                cout << 0 << endl;
                continue;
            }

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