Submission #970755

#TimeUsernameProblemLanguageResultExecution timeMemory
970755LudisseyXORanges (eJOI19_xoranges)C++14
100 / 100
80 ms9328 KiB
#include <bits/stdc++.h>
#define int long long
#define sz(a) (int)a.size()
#define all(x) (x).begin(), (x).end()
using namespace std;

struct FenwickTree{
    vector<int> bit;
    int n;
    FenwickTree(int vn){
        this->n=vn;
        bit.resize(vn,0);
    }
    FenwickTree(vector<int> const &a) : FenwickTree(sz(a)) {
        for (int i = 0; i < sz(a); i++) add(i, 0, a[i]);
    }
    int sum(int r){
        int ret=0;
        for (; r>=0; r=(r&(r+1))-1) ret=ret^bit[r];
        return ret;
    }
    int sum(int l, int r){
        return sum(l-1)^sum(r);
    }
    void add(int r, int prev, int delta){
        for (; r<n; r=(r|(r+1))) {
            bit[r]=bit[r]^prev;
            bit[r]=bit[r]^delta;
        }
    }
};



signed main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    int n,q; cin >> n>>q;
    vector<int> uneven(n/2);
    vector<int> even((n+1)/2);
    for (int i = 0; i < n; i++)
    {
        int a; cin >> a;
        if(i%2) uneven[i/2]=a;
        else even[i/2]=a;
    }
    FenwickTree evn(even);
    FenwickTree unevn(uneven);

    for (int i = 0; i < q; i++)
    {
        int t,a,b; cin >> t >> a >> b;
        if(t==1){
            a--;
            if(a%2==0) {
                evn.add(a/2, even[a/2], b);
                even[a/2]=b;
            }
            else {
                unevn.add(a/2, uneven[a/2], b);
                uneven[a/2]=b;
            }
        }else{
            a--; b--;
            if((b-a+1)%2==0) cout << "0\n";
            else {
                if(a%2==0) cout << evn.sum(a/2, b/2) << "\n";
                else cout << unevn.sum(a/2, b/2) << "\n";
            }
        }
    }
    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...