Submission #1195811

#TimeUsernameProblemLanguageResultExecution timeMemory
1195811OmarAlimammadzadeXORanges (eJOI19_xoranges)C++20
100 / 100
93 ms5704 KiB
#include <bits/stdc++.h>
#define intt long long
using namespace std;

const int N = 2e5 + 1;
int t[4 * N][2];

void upd(int v, int l, int r, int i, int x) {
    if (l == r) {
        t[v][l & 1] = x;
        return;
    }
    int m = (l + r) / 2;
    if (i <= m) {
        upd(v * 2, l, m, i, x);
    } else {
        upd(v * 2 + 1, m + 1, r, i, x);
    }
    t[v][0] = t[v * 2][0] ^ t[v * 2 + 1][0];
    t[v][1] = t[v * 2][1] ^ t[v * 2 + 1][1];
}

int ask(int v, int l, int r, int ql, int qr) {
    if (ql <= l and r <= qr) {
        return t[v][ql & 1];
    }
    int m = (l + r) / 2, res = 0;
    if (ql <= m) {
        res ^= ask(v * 2, l, m, ql, qr);
    }
    if (m < qr) {
        res ^= ask(v * 2 + 1, m + 1, r, ql, qr);
    }
    return res;
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    int n, q;
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        int x;
        cin >> x;
        upd(1, 1, n, i, x);
    }
    while (q--) {
        int tp;
        cin >> tp;
        if (tp == 1) {
            int i, x;
            cin >> i >> x;
            upd(1, 1, n, i, x);
        } else {
            int l, r;
            cin >> l >> r;
            if ((r - l) & 1) {
                cout << "0\n";
            } else {
                cout << ask(1, 1, n, l, r) << '\n';
            }
        }
    }
}
#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...