Submission #1176438

#TimeUsernameProblemLanguageResultExecution timeMemory
1176438Albara_AbdulhafithXORanges (eJOI19_xoranges)C++20
0 / 100
49 ms4680 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;

#define fastIO ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define take(x) for(auto& el : x){cin >> el;}
#define give(x) for(auto& el : x){cout << el << ' ';}cout << '\n';
#define vi vector<int>
#define vvi vector<vi>
#define vll vector<ll>
#define vvll vector<vll>
#define rep(i, x) for(int i = 0; i < x; i++)
#define sz(x) ll(x.size())

const ll modu = 998244353ll;

ll mod(ll x, ll md = modu){
    return (((x % md) + md ) % md);
}



void solve(){
    int n, q; cin >> n >> q;

    vector<int> a(n + 1);
    a[0] = 0;
    for(int i = 1; i <= n;i++){
        cin >> a[i];
    }

    vector<int> prefodd(n + 1);
    vector<int> prefeven(n + 1);

    prefeven[0] = prefodd[0] = 0;

    prefodd[1] = a[1];
    prefeven[1] = 0;

    for(int i = 2; i <= n; i++){
        if(i & 1){
            prefeven[i] = prefeven[i - 1];
            prefodd[i] = (a[i] ^ prefodd[i - 1]);
        }
        else{
            prefeven[i] = (a[i] ^ prefeven[i - 1]);
            prefodd[i] = prefodd[i - 1];
        }
    }

    int op, l, r;
    for(int i = 0; i < q; i++){
        cin >> op >> l >> r;
        if(op == 1){
            a[l] = r;
            if(l & 1){
                prefodd[l] = (prefodd[l - 1] ^ a[l]);
            }
            else{
                prefeven[l] = (prefeven[l - 1] ^ a[l]);
            }

            for(int j = l + 1; j <= n; j++){
                if(j & 1){
                    prefeven[j] = prefeven[j - 1];
                    prefodd[j] = (a[j] ^ prefodd[j - 1]);
                }
                else{
                    prefeven[j] = (a[j] ^ prefeven[j - 1]);
                    prefodd[j] = prefodd[j - 1];
                }
            }
        }
        else{
            bool cond = (!((r - l) & 1));

            bool swtch = (l & 1);
            if(!cond){
                swtch = (!swtch);
            }
            if(swtch){
                cout << (prefodd[r] ^ prefodd[l - 1 + (!cond)]) << '\n';
            }
            else{
                cout << (prefeven[r] ^ prefeven[l - 1 + (!cond)]) << '\n';
            }
        }
    }
}

int main(){
    fastIO
    int tc = 1;
    //cin >> tc;
    while(tc--){
        solve();
    }
    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...