Submission #911088

#TimeUsernameProblemLanguageResultExecution timeMemory
911088speedcodeXORanges (eJOI19_xoranges)C++17
100 / 100
128 ms8028 KiB
#include <bits/stdc++.h>
using namespace std;

int biggestPowOf2(int i){
    int res = 1;
    while(i % 2 == 0){
        res *= 2;
        i /= 2;
    }
    return res;
}

void xorToArray(long long* arr, int index, long long value, int arrLength){
    while(index < arrLength){
        arr[index] ^= value;
        index += biggestPowOf2(index);
    }
}

int ArraySum(long long* arr, int index){
    if(index == 0) return 0;
    return arr[index] ^ ArraySum(arr, index - biggestPowOf2(index));
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n,q;
    cin >> n >> q;
    long long oddValues[(n+1)/2 + 1];
    int oddLength = (n+1)/2 + 1;
    long long evenValues[n/2 + 1];
    int evenLength = n/2 + 1;
    fill(oddValues,oddValues + oddLength, 0);
    fill(evenValues,evenValues + evenLength, 0);
    for(int i = 1; i <= n; i++){
        long long r;
        cin >> r;
        if(i%2 == 0){
            xorToArray(evenValues, i/2, r, evenLength);
        } else {
            xorToArray(oddValues, i/2 + 1, r, oddLength);
        }
    }
    for(int i = 0; i < q; i++){
        short int t;
        cin >> t;
        if(t==2){
            int l,u;
            cin >> l >> u;
            if((l-u)%2 != 0){
                cout << "0\n";
            } else if(l%2 == 0){
                cout << (ArraySum(evenValues, u/2) ^ ArraySum(evenValues, l/2 - 1)) << '\n';
            } else {
                cout << (ArraySum(oddValues, u/2 + 1) ^ ArraySum(oddValues, l/2)) << '\n';
            }

        } else {
            int I;
            long long val;
            cin >> I;
            cin >> val;
            if(I%2 == 0){
                xorToArray(evenValues, I/2, (ArraySum(evenValues, I/2) ^ ArraySum(evenValues, I/2 - 1) ^ val), evenLength);
            } else {
                xorToArray(oddValues, I/2 + 1, (ArraySum(oddValues, I/2 + 1) ^ ArraySum(oddValues, I/2) ^ val), oddLength);
            }
        }
    }
}
#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...