제출 #1337543

#제출 시각아이디문제언어결과실행 시간메모리
1337543nambanana987XORanges (eJOI19_xoranges)C++20
100 / 100
61 ms3968 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define sz(a) (int)a.size()
#define mk make_pair
#define pii pair<int,int>
int n,q;
namespace subtask1{
    const int N=10005;
    int M[N];
    void solve(){
        for(int i=1;i<=n;++i) cin>>M[i];
        while(q--){
            int type,l,r;cin>>type>>l>>r;
            if(type==1){
                M[l]=r;
            }
            else{
                ll ans=0;
                for(int i=l;i<=r;++i){
                    if((i-l+1)%2==0 || (r-i+1 )%2==0) continue;
                    ans^=M[i];
                }
                cout<<ans<<'\n';
            }
        }
    }
}

struct Fenwick{
    vector<int>fen;
    int a;

    Fenwick(int _n) : a(_n) , fen(_n+5){}

    void update(int id,int val){
        while(id<=a){
            fen[id]^=val;
            id+=id&-id;
        }
    }

    int get(int id){
        int res=0;
        while(id>0){
            res^=fen[id];
            id-=id&-id;
        }
        return res;
    }

    int get_range(int l,int r){
        return get(r) ^get(l-1);
    }
};
namespace subtask2{
    const int N=2e5+5;
    int M[N];
    void solve(){
        Fenwick tree1(n),tree2(n);
        for(int i=1;i<=n;++i) {
            cin>>M[i];
            if(i&1) tree1.update(i,M[i]);
            else tree2.update(i,M[i]);
        }
        
        while(q--){
            int type,l,r;cin>>type>>l>>r;
            if(type==1){
                int x=M[l]^r;
                M[l]=r;
                if(l&1) tree1.update(l,x);
                else tree2.update(l,x);
            }
            else{
                if(l+r &1){
                    cout<<0<<'\n';
                }
                else{
                    if(l&1){
                        cout<<tree1.get_range(l,r)<<'\n';
                    }
                    else cout<<tree2.get_range(l,r)<<'\n';
                }
            }
        }
    }
}
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>q;
    subtask2::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...