Submission #433197

#TimeUsernameProblemLanguageResultExecution timeMemory
433197Valaki2XORanges (eJOI19_xoranges)C++14
50 / 100
1082 ms65536 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int n, q;
vector<int> numbers;
vector<vector<int> > bits;
vector<vector<int> > prefix_sum;

void update() {
    int pos, val;
    cin >> pos >> val;
    numbers[pos] = val;
    for(int i = 0; i < 30; ++i) {
        if(numbers[pos] & (1 << i)) {
            bits[pos][i] = true;
        } else {
            bits[pos][i] = false;
        }
    }
    prefix_sum[1] = bits[1];
    for(int i = 2; i <= n; ++i) {
        for(int j = 0; j < 30; ++j) {
            prefix_sum[i][j] = prefix_sum[i - 2][j];
            if(bits[i][j]) {
                prefix_sum[i][j] = (1 - prefix_sum[i][j]);
            }
        }
    }
}

void query() {
    int l, r;
    cin >> l >> r;
    if((r - l + 1) % 2 == 0) {
        cout << "0\n";
        return;
    }
    vector<int> ans(30, 0);
    ans = prefix_sum[r];
    for(int i = 0; i < 30; ++i) {
        if(bits[l][i]) {
            ans[i] = (1 - ans[i]);
        }
        if(prefix_sum[l][i]) {
            ans[i] = (1 - ans[i]);
        }
    }
    int result = 0;
    for(int i = 0; i < 30; ++i) {
        result += ans[i] * (1 << i);
    }
    cout << result << "\n";
}

void solve() {
    cin >> n >> q;
    numbers.assign(1 + n, 0);
    bits.assign(1 + n, vector<int> (30, 0));
    prefix_sum.assign(1 + n, vector<int> (30, 0));
    for(int i = 1; i <= n; ++i) {
        cin >> numbers[i];
        for(int j = 0; j < 30; ++j) {
            if(numbers[i] & (1 << j)) {
                bits[i][j] = 1;
            }
            if(i == 1) continue;
            prefix_sum[i][j] = prefix_sum[i - 2][j];
            if(bits[i][j]) {
                prefix_sum[i][j] = (1 - prefix_sum[i][j]);
            }
        }
        if(i == 1) prefix_sum[i] = bits[i];
    }
    while(q--) {
        int type = 0;
        cin >> type;
        if(type == 1) update();
        else query();
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
    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...