Submission #645378

#TimeUsernameProblemLanguageResultExecution timeMemory
6453781zaid1XORanges (eJOI19_xoranges)C++17
100 / 100
101 ms11056 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n';

const int M = 2e6+5, MOD = 1e9;
int fia[M], fib[M], v[M];

void zor(int pos, int val) {
    for (int i = pos; i < M; i += -i&i) fia[i] ^= val;
}

int zum(int pos) {
    int ans = 0;
    for (int i = pos; i > 0; i -= -i&i) ans ^= fia[i];
    return ans;
}

void zur(int pos, int val) {
    for (int i = pos; i < M; i += -i&i) fib[i] ^= val;
}

int xum(int pos) {
    int ans = 0;
    for (int i = pos; i > 0; i -= -i&i) ans ^= fib[i];
    return ans;
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    
    int n, t;
    cin >> n >> t;

    for (int i = 1; i <= n; i++) {
        cin >> v[i];
        if (i%2) zor(i, v[i]);
        else zur(i, v[i]);
    }

    while (t--) {
        int x;
        cin >> x;
        if (x == 1) {
            int a, b;
            cin >> a >> b;

            if (a%2) zor(a, (b^v[a]));
            else zur(a, (b^v[a]));
            v[a] = b;
        } else {
            int l, r;
            cin >> l >> r;
            if ((r-l)%2) {cout << 0 << endl;}
            else if (l%2) {cout << (zum(r)^zum(l-1)) << endl;}
            else cout << (xum(r)^xum(l-1)) << endl;
        }
    }

    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...