Submission #1357325

#TimeUsernameProblemLanguageResultExecution timeMemory
1357325nasjesXORanges (eJOI19_xoranges)C++20
0 / 100
1095 ms14588 KiB
#include <iostream>
#include <iomanip>
#include <vector>
#include <cmath>
#include <algorithm>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <bitset>
#include <string>
#include <cstring>
#include <iterator>
#include <random>
#include <unordered_map>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;

typedef long double ld;
const ll dim=1e6 + 10;
const ll mod=  998244353;
const ll inf=1e18+77;
//#define endl "\n"
#define fi first
#define pb push_back
#define se second
#define vll vector<ll>

ll n, k, q;
ll a[dim];
ll t[4*dim], t1[4*dim], t2[4*dim];
void bd(ll v, ll tl, ll tr){
    if(tl==tr){
        t[v]=a[tl];
        return;
    }
    ll tm=(tl+tr)/2;
    bd(2*v, tl, tm);
    bd(2*v+1, tm+1, tr);
    t[v]=(t[2*v]^t[2*v+1]);
}

void bd1(ll v, ll tl, ll tr){
    if(tl==tr){
        if(tl&1)t1[v]=a[tl];
        else t1[v]=0;
        return;
    }
    ll tm=(tl+tr)/2;
    bd1(2*v, tl, tm);
    bd1(2*v+1, tm+1, tr);
    t1[v]=(t1[2*v]^t1[2*v+1]);
}

void bd2(ll v, ll tl, ll tr){
    if(tl==tr){
        if(tl%2==0)t2[v]=a[tl];
        else t2[v]=0;
        return;
    }
    ll tm=(tl+tr)/2;
    bd2(2*v, tl, tm);
    bd2(2*v+1, tm+1, tr);
    t2[v]=(t2[2*v]^t2[2*v+1]);
}

ll get(ll v, ll tl, ll tr, ll l, ll r, ll tx[]){
    if(l>tr || r<tl)return 0;
    if(l<= tl && tr<=r)return tx[v];
    ll tm=(tl+tr)/2;
    return (get(2*v, tl, tm, l, r,  tx)^get(2*v+1, tm+1, tr, l, r, tx ));
}

void upd(ll v, ll tl, ll tr, ll pos, ll val, ll tx[]){
    if(pos>tr || pos<tl)return;
    if(tl==tr){
        t[v]=val;
        return;
    }
    ll tm=(tl+tr)/2;
    upd(2*v, tl, tm, pos,  val, tx);
    upd(2*v+1, tm+1, tr, pos,  val, tx);
    tx[v]=(tx[2*v]^tx[2*v+1]);
}


int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    ll tt;
    //cin>>tt;
    tt=1;
    while(tt--){
        ll x, y;
        cin>>n>>q;
        for(int i=1; i<=n; i++){
            cin>>a[i];
        }
        bd(1, 1, n);
        bd1(1,1, n);
        bd2(1, 1, n);
        while(q--){
            ll tp, l, r, p, v;
            cin>>tp;
            if(tp==1){
                cin>>p>>v;
                a[p]=v;
                if(p&1)upd(1, 1, n, p, v, t1);
                else upd(1, 1, n, p, v, t2);
                upd(1, 1, n, p, v, t);
            }
            else{
                cin>>l>>r;
                ll ans=0;
                ll tm=(l+r+1)/2;
                ll cnt=1;
                for(int i=l; i<=tm; i++){
                    ll w=(cnt)*(cnt+1)/2 +(r-l+1-cnt)*cnt;
                    if(w&1){
                        ans=(ans^a[i]);
                    }
                    cnt++;
                }
                if((l+r)%2==0)tm++;
                cnt=1;
              //  cout<<ans<<endl;
                for(int i=r; i>=tm; i--){
                    ll w=(cnt)*(cnt+1)/2 +(r-l+1-cnt)*cnt;
                    if(w&1){
                        ans=(ans^a[i]);
                    }
                    cnt++;
                }
                cout<<ans<<endl;
            }
        }



    }

    return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...