Submission #1289074

#TimeUsernameProblemLanguageResultExecution timeMemory
1289074kaysanXORanges (eJOI19_xoranges)C++20
0 / 100
62 ms6156 KiB
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define pb push_back
#define pp pop_back
#define pf push_front
#define pt pop_front
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define pll pair<ll,ll>
#define pii pair<int,int>
#define vl vector<ll>
#define endl "\n"
#define fr(i,a,b) for(ll i=a; i<=b; i++)
#define fre(i,a,b) for(ll i=a; i>=b; i--)
#define kpnyh ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
// __builtin_ctzll(bits) kalo mau iterasi bits 1 nya aja
const ll maxn = 1e5+7, maxn2 = 1e7+7, modn2 = 1e9+7, modn = 998244353;
using namespace std;
ll mul(ll x, ll y) {return (x*y) % modn;}
ll add(ll x, ll y) {return(x+y) % modn;}
ll dec(ll x, ll y) {return(x-y+modn) % modn;}
ll binpow(ll x, ll y) {ll ret = 1;while (y) {if (y&1) ret = mul(ret,x); y/=2;x = mul(x,x);}return ret;}
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
 
ll te,n,m,k,q,s;

void upd(ll i, ll val, ll n, vector<ll>&bit) {
    while (i <= n) {
        bit[i] ^= val;
        i += i & -i;
    }
}

ll qry(ll i, const vector<ll>&bit) {
    ll ret = 0;
    while (i > 0) {
        ret ^= bit[i];
        i -= i & -i;  
    }
    return ret;
}

void solve() {
	cin>>n>>q;
    vector<ll>a(n+1),bit(n+1),bit2(n+1);
    for (ll i=1; i<=n; i++) {
        cin>>a[i];
        if (i&1) upd(i,a[i],n,bit);
        else upd(i,a[i],n,bit2);
    }
    while (q--) {
        ll x,y,z; cin>>x>>y>>z;
        if (x == 1) {
            if (y&1) {
                upd(y,a[y],n,bit);
                a[y] = z;
                upd(y,a[y],n,bit);
            } else {
                upd(y,a[y],n,bit2);
                a[y] = x;
                upd(y,a[y],n,bit2);
            }
        } else {
            if ((z - y + 1) % 2 == 0) {
                cout<<0<<endl;
            } else {
                if (y&1) {
                    cout<<qry(z,bit) - qry(y-1,bit)<<endl;
                } else {
                    cout<<qry(z,bit2) - qry(y-1,bit2)<<endl;
                }
            }
        }
    }
}
 
/*\
1
5 2
3
98 99 20 31 74
27 31 50 26 90
10 91 27 50 21
*/
 
int main () {
	kpnyh
	te=1;
//	cin>>te;
    while (te--) {
  //  	cout<<endl;
        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...