답안 #793115

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
793115 2023-07-25T14:04:33 Z Godgift42 XORanges (eJOI19_xoranges) C++14
55 / 100
1000 ms 13232 KB
#include <bits/stdc++.h>
using namespace std;

vector<int> st;
vector<int> st2;

void build(vector<int> a, int v, int tl, int tr){
    if(tl==tr) st[v]=a[tl];
    else{
        int tm=(tl+tr)/2;
        build(a,v*2,tl,tm);
        build(a,v*2+1,tm+1,tr);
        st[v]=st[v*2]^st[v*2+1];
    }
}

int XUM(int v, int tl, int tr, int l, int r){
    if(l>r) return 0;
    if(l==tl and r==tr) return st[v];
    int tm=(tl+tr)/2;
    return XUM(v*2,tl,tm,l,min(r,tm))^XUM(v*2+1,tm+1,tr,max(l,tm+1),r);
}

void update(int v, int tl, int tr, int pos, int new_val){
    if(tl==tr){
        st[v]=new_val;
    }
    else{
        int tm=(tl+tr)/2;
        if(pos<=tm) update(v*2,tl,tm,pos,new_val);
        else update(v*2+1,tm+1,tr,pos,new_val);
        st[v]=st[v*2]^st[v*2+1];
    }
}

void build2(vector<int> a, int v, int tl, int tr){
    if(tl==tr) st2[v]=a[tl];
    else{
        int tm=(tl+tr)/2;
        build2(a,v*2,tl,tm);
        build2(a,v*2+1,tm+1,tr);
        st2[v]=st2[v*2]^st2[v*2+1];
    }
}

int XUM2(int v, int tl, int tr, int l, int r){
    if(l>r) return 0;
    if(l==tl and r==tr) return st2[v];
    int tm=(tl+tr)/2;
    return XUM2(v*2,tl,tm,l,min(r,tm))^XUM2(v*2+1,tm+1,tr,max(l,tm+1),r);
}

void update2(int v, int tl, int tr, int pos, int new_val){
    if(tl==tr){
        st2[v]=new_val;
    }
    else{
        int tm=(tl+tr)/2;
        if(pos<=tm) update2(v*2,tl,tm,pos,new_val);
        else update2(v*2+1,tm+1,tr,pos,new_val);
        st2[v]=st2[v*2]^st2[v*2+1];
    }
}

int main(){
    int n,q;
    cin >> n >> q;
    vector<int> a;
    vector<int> a2;
    st.resize(4*((n+1)/2));
    st2.resize(4*(n/2));
    for(int i=0;i<n;i++){
        int x;
        cin >> x;
        if(i%2==0)a.push_back(x);
        else a2.push_back(x);
    }
    build(a,1,0,((n+1)/2)-1);
    build2(a2,1,0,n/2-1);
    while(q--){
        int action;
        cin >> action;
        if(action==1){
            int pos,ch;
            cin >> pos >> ch;
            if(pos%2!=0) update(1,0,(n+1)/2-1,pos/2,ch);
            else update2(1,0,n/2-1,pos/2-1,ch);
        }
        else{
            int l,u;
            cin >> l >> u;
            if((u-l)%2==1) cout << 0<<"\n";
            else{
                if(l%2==1){
                    int xum=XUM(1,0,((n+1)/2)-1,l/2,u/2);
                    cout << xum<<"\n";
                }
                else{
                    int xum=XUM2(1,0,(n/2)-1,l/2-1,u/2-1);
                    cout << xum<<"\n";
                }
            }
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 312 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 2 ms 212 KB Output is correct
5 Correct 2 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 312 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 2 ms 212 KB Output is correct
10 Correct 2 ms 212 KB Output is correct
11 Correct 9 ms 564 KB Output is correct
12 Correct 9 ms 656 KB Output is correct
13 Correct 12 ms 648 KB Output is correct
14 Correct 11 ms 564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1080 ms 13232 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 312 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 2 ms 212 KB Output is correct
10 Correct 2 ms 212 KB Output is correct
11 Correct 9 ms 564 KB Output is correct
12 Correct 9 ms 656 KB Output is correct
13 Correct 12 ms 648 KB Output is correct
14 Correct 11 ms 564 KB Output is correct
15 Execution timed out 1080 ms 13232 KB Time limit exceeded
16 Halted 0 ms 0 KB -