169512025-05-18 13:42:40tomi7XORangespython3Futási hiba 0/10016ms3140 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

vector<int> binodd;
vector<int> bineven;
vector<int> a;

int build_odd(int r, int l, int v){
    if(r==l){
        binodd[v]=a[r*2];
        return binodd[v];
    }
    int tm=(r+l)/2;
    binodd[v]=build_odd(r, tm, v*2) ^ build_odd(tm+1, l, v*2+1);
    return binodd[v];
}

int query_odd(int l, int r, int ll, int rr, int v){
    if(r==rr && l==ll){
        return binodd[v];
    }
    if(l>rr || r<ll){
        return 0;
    }
    int tm=(r+l)/2;
    return query_odd(l, tm, ll, min(tm, rr), v*2) ^ query_odd(tm+1, r, max(tm+1, ll), rr, v*2+1);
}

void update_odd(int i, int h, int l, int r, int v){
    if(i/2>=l && i/2<=r){
        binodd[v]=binodd[v]^a[i*2];
        binodd[v]=binodd[v]^h;
        if(r==l){
            return;
        }
        int tm=(r+l)/2;
        update_odd(i, h, l, tm, v*2);
        update_odd(i, h, tm+1, r, v*2+1);
    }else{
        return;
    }
}


int build_even(int r, int l, int v){
    if(r==l){
        bineven[v]=a[r*2+1];
        return bineven[v];
    }
    int tm=(r+l)/2;
    bineven[v]=build_even(r, tm, v*2) ^ build_even(tm+1, l, v*2+1);
    return bineven[v];
}

int query_even(int l, int r, int ll, int rr, int v){
    if(r==rr && l==ll){
        return bineven[v];
    }
    if(l>rr || r<ll){
        return 0;
    }
    int tm=(r+l)/2;
    return query_even(l, tm, ll, min(tm, rr), v*2) ^ query_even(tm+1, r, max(tm+1, ll), rr, v*2+1);
}

void update_even(int i, int h, int l, int r, int v){
    if(i>=l && i<=r){
        bineven[v]=bineven[v]^a[i*2+1];
        bineven[v]=bineven[v]^h;
        if(r==l){
            return;
        }
        int tm=(r+l)/2;
        update_even(i, h, l, tm, v*2);
        update_even(i, h, tm+1, r, v*2+1);
    }else{
        return;
    }
}


int main() {
	int n, q;cin>>n>>q;
    a.assign(n, 0);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    bineven.assign(n*4, 0);
    binodd.assign(n*4, 0);
    build_odd(0, (n+1)/2-1, 1);
    build_even(0, n/2-1, 1);
    while(q--){
        int x, y, z;cin>>x>>y>>z;
        if(x==1){
            if(y%2==1){
                update_odd(y/2, z, 0, (n+1)/2-1, 1);
            }else{
                y--;
                update_even(y/2, z, 0, n/2-1, 1);
            }
            a[y-1]=z;
        }else{
            if((z-y)%2==0 && z%2==1){
                cout<<query_odd(0, (n+1)/2-1, y/2, z/2, 1)<<'\n';
            }else if((z-y)%2==0){
                y--; z--;
                cout<<query_even(0, n/2-1, y/2, z/2, 1)<<'\n';
            }else{
                cout<<0<<'\n';
            }
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/12
1Futási hiba14ms3056 KiB
2Futási hiba16ms2864 KiB
3Futási hiba14ms2868 KiB
4Futási hiba16ms2868 KiB
5Futási hiba14ms3052 KiB
subtask20/18
1Futási hiba14ms3064 KiB
2Futási hiba16ms2868 KiB
3Futási hiba16ms3020 KiB
4Futási hiba16ms2868 KiB
5Futási hiba14ms3000 KiB
subtask30/25
1Futási hiba16ms3140 KiB
2Futási hiba16ms2868 KiB
3Futási hiba16ms2868 KiB
4Futási hiba14ms2880 KiB
subtask40/20
1Futási hiba16ms2868 KiB
2Futási hiba14ms2832 KiB
3Futási hiba16ms2988 KiB
4Futási hiba14ms3012 KiB
5Futási hiba16ms3056 KiB
subtask50/25
1Futási hiba14ms3040 KiB
2Futási hiba16ms3040 KiB
3Futási hiba16ms3044 KiB
4Futási hiba14ms2868 KiB
5Futási hiba16ms2956 KiB