제출 #1363407

#제출 시각아이디문제언어결과실행 시간메모리
1363407nataliaaXORanges (eJOI19_xoranges)C++20
100 / 100
215 ms6252 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 2e5+5;
int okl[MAXN], okr[MAXN];
void upd1(int idx, int val) {
    while(idx <= MAXN) {
        okl[idx]^=val;
        idx+= idx&(-idx);
    }
}
int get1(int idx){
    int sum = 0;
    while(idx > 0 ){
        sum ^= okl[idx];
        idx -= idx&(-idx);
    }
    return sum;
}
void upd2(int idx, int val) {
    while(idx <= MAXN) {
        okr[idx]^=val;
        idx+= idx&(-idx);
    }
}
int get2(int idx){
    int sum = 0;
    while(idx > 0 ){
        sum ^= okr[idx];
        idx -= idx&(-idx);
    }
    return sum;
}
signed main() {
    int n, q;
    cin >> n >> q;
    int a[n];
    for(int i = 1; i <= n ; i++) {
        int x;
        cin >>x;
        a[i] = x;
        if(i%2==0) upd2(i, x);
        else upd1(i, x);
    }
    
    while(q--) {
        int t;
        cin >> t;
        if(t==1) {
            int l, r;
            cin >> l >> r;
            int r1 = r;
            r = r^a[l];
            a[l] = r1;
            if(l%2==0) upd2(l, r);
            else upd1(l, r);
        }
        else {
            int l , r;
            cin >> l >> r;
            if((r-l+1)%2==0) {
                cout << 0<<endl;
                continue;
            }
            if(l%2==0) cout << (get2(r)^get2(l-1)) << endl;
            else cout << (get1(r)^get1(l-1)) << endl;
        }
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…