Submission #925437

#TimeUsernameProblemLanguageResultExecution timeMemory
925437KarootXORanges (eJOI19_xoranges)C++17
100 / 100
277 ms12040 KiB
#include <iostream>
#include <cmath>
#include <unordered_map>
#include <map>
#include <set>
#include <queue>
#include <vector>
#include <string>
#include <iomanip>
#include <algorithm>

#define all(x)  (x).begin(), (x).end()
#define rall(x)  (x).rbegin(), (x).rend()

using namespace std;

typedef long long ll;

ll linf = 1e15+1;

inline void scoobydoobydoo(){
    ios::sync_with_stdio(false);
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
}

const int MAXN = 2e5+3;
ll vals[MAXN];

ll oddBIT[MAXN], evenBIT[MAXN];

void update(int node, ll val, bool isOdd){
    val ^= vals[node];
    while (node < MAXN){
        if (isOdd)oddBIT[node] ^= val;
        else evenBIT[node] ^= val;
        node += node&(~node+1);
    }
}

ll query(int l, int r, bool isOdd){
    ll over = 0;
    while (r){
        if (isOdd)over ^= oddBIT[r];
        else over ^= evenBIT[r];
        r -= r&(~r+1);
    }

    //cout << "over: " << over << endl;

    ll under = 0;
    l--;
    while (l){
        if (isOdd)under ^= oddBIT[l];
        else under ^= evenBIT[l];
        l -= l&(~l+1);
    }
    return over^under;
}



int main(){
    scoobydoobydoo();
    int n, q; cin >> n >> q;
    for (int i = 1; i <= n; i++){
        cin >> vals[i];
        update(i, 0, i%2);
    }

    /*for (int i = 1; i <= 2*n; i++){
        cout << i << ": " << oddBIT[i] << " " << evenBIT[i] << endl;
    }*/

    vector<int> ans;

    while (q--){
        int t; cin >> t;
        if (t == 1){
            int i, v; cin >> i >> v;
            update(i, v, i%2);
            vals[i] = v;
        } else {
            int l, r; cin >> l >> r;
            if ((r-l+1)%2 == 0)ans.push_back(0);
            else if (l == r)ans.push_back(vals[l]);
            else ans.push_back(query(l, r, r%2));
            //cout << query(l, r, l%2) << endl;
        }
    }

    for (ll x : ans)cout << x << 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...