Submission #272131

#TimeUsernameProblemLanguageResultExecution timeMemory
272131JuliusMieliauskasXORanges (eJOI19_xoranges)C++14
75 / 100
1090 ms8748 KiB
#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define vi vector<int>
#define vll vector<long long>
#define MOD 1000000007
#define endl '\n'

typedef long long ll;

void print(vi v){
    cout<<"Contents of vector:\n";
    for(auto x : v) cout<<x<<" ";
    cout<<endl<<endl;
}

void solve(){
    int n, q; cin>>n>>q;
    int ar[n], prefeven[n+1] = {0}, prefodd[n+1] = {0};
    for(int i = 0; i<n; i++) cin>>ar[i];

    prefodd[0] = 0;
    prefeven[0] = 0;
    prefodd[1] = ar[0];
    prefeven[2] = ar[1];

    for(int i = 4; i<=n; i+=2) {
        prefeven[i] = prefeven[i-2] ^ ar[i-1];
    }

    for(int i = 3; i<=n; i+=2) {
        prefodd[i] = prefodd[i-2] ^ ar[i-1];
        //cout<<i<<" is equal to "<<prefodd[i-2]<<" xor "<<ar[i-1]<<endl;
    }

    /*cout<<"Prefsodd: "<<endl;
    for(int i = 0; i<=n; i++) cout<<prefodd[i]<<" ";
    cout<<endl<<endl;

    cout<<"Prefseven: "<<endl;
    for(int i = 0; i<=n; i++) cout<<prefeven[i]<<" ";
    cout<<endl<<endl;*/

    for(int i = 0; i<q; i++){
        int type; cin>>type;
        if(type == 1){
            int ind, value; cin>>ind>>value;

            ar[ind-1] = value;

            /*cout<<"array: "<<endl;
            for(int i = 0; i<=n; i++) cout<<ar[i]<<" ";
            cout<<endl<<endl;*/

            prefodd[0] = 0;
            prefeven[0] = 0;
            prefodd[1] = ar[0];
            prefeven[2] = ar[1];

            for(int i = 4; i<=n; i+=2) {
                prefeven[i] = prefeven[i-2] ^ ar[i-1];
            }

            for(int i = 3; i<=n; i+=2) {
                prefodd[i] = prefodd[i-2] ^ ar[i-1];
                //cout<<i<<" is equal to "<<prefodd[i]<<" of "<<prefodd[i-2]<<" xor "<<ar
            }

            /*cout<<"Prefsodd: "<<endl;
            for(int i = 0; i<=n; i++) cout<<prefodd[i]<<" ";
            cout<<endl<<endl;*/

        } else {
            int from, to; cin>>from>>to;

            if((to-from+1)%2 == 0){
                cout<<"0"<<endl;
                continue;
            }

            int ans = 0;

            if(from%2) {
                 if(from != 1) ans = prefodd[to] ^ prefodd[from-2];
                 else ans = prefodd[to] ^ 0;
                 //cout<<"odd"<<endl;
            } else {
                ans = prefeven[to] ^ prefeven[from-2];
            }

            /*cout<<"Map: "<<endl;
            for(auto x : m){
                cout<<x.first<<" : "<<x.second<<endl;
            }*/

            cout<<ans<<endl;
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    //ifstream cin("input.txt"); ofstream cout("output.txt");///cia failai

    //int T; cin>>T;
    int T = 1;

    for(int it = 1; it<=T; it++){
        solve();

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