Submission #1188452

#TimeUsernameProblemLanguageResultExecution timeMemory
1188452andrei_nXORanges (eJOI19_xoranges)C++20
100 / 100
51 ms3144 KiB
#include <bits/stdc++.h>

using namespace std;

int n;
int aib1[200005],aib2[200005];

int query(int p)
{
    int *aib = (p&1 ? aib1 : aib2);
    int res = 0;
    for(; p>0; p ^= (p&-p))
    {
        res ^= aib[p];
    }
    return res;
}

void update(int p, int x)
{
    x ^= (query(p) ^ query(p-2));
    int *aib = (p&1 ? aib1 : aib2);
    for(; p<=n; p += (p&-p))
        aib[p] ^= x;
}

signed main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int q; cin>>n>>q;
    for(int i=1; i<=n; ++i)
    {
        int x; cin>>x;
        update(i,x);
    }
    while(q--)
    {
        int t,a,b; cin>>t>>a>>b;
        if(t == 1)
            update(a,b);
        else
        {
            if((b-a) & 1)
                cout<<"0\n";
            else
                cout<<(query(b) ^ query(a - 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...