Submission #795820

# Submission time Handle Problem Language Result Execution time Memory
795820 2023-07-27T16:25:06 Z Godgift42 XORanges (eJOI19_xoranges) C++14
100 / 100
132 ms 10436 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;
    scanf("%d%d",&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;
        scanf("%d",&x);
        if((i&1)==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;
        scanf("%lld",&action);
        if(action==1){
            int pos,ch;
            scanf("%d%d",&pos,&ch);
            if((pos&1)!=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;
            scanf("%d%d",&l,&u);
            if(((u-l)&1)==1) printf("%d\n",0);
            else{
                if((l&1)==1){
                    int xum=XUM(1,0,((n+1)/2)-1,l/2,u/2);
                    printf("%d\n",xum);
                }
                else{
                    int xum=XUM2(1,0,(n/2)-1,l/2-1,u/2-1);
                    printf("%d\n",xum);
                }
            }
        }
    }
    return 0;
}

Compilation message

xoranges.cpp: In function 'int main()':
xoranges.cpp:82:19: warning: format '%lld' expects argument of type 'long long int*', but argument 2 has type 'int*' [-Wformat=]
   82 |         scanf("%lld",&action);
      |                ~~~^  ~~~~~~~
      |                   |  |
      |                   |  int*
      |                   long long int*
      |                %d
xoranges.cpp:67:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |     scanf("%d%d",&n,&q);
      |     ~~~~~^~~~~~~~~~~~~~
xoranges.cpp:74:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   74 |         scanf("%d",&x);
      |         ~~~~~^~~~~~~~~
xoranges.cpp:82:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   82 |         scanf("%lld",&action);
      |         ~~~~~^~~~~~~~~~~~~~~~
xoranges.cpp:85:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   85 |             scanf("%d%d",&pos,&ch);
      |             ~~~~~^~~~~~~~~~~~~~~~~
xoranges.cpp:91:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   91 |             scanf("%d%d",&l,&u);
      |             ~~~~~^~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory 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
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 3 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 3 ms 340 KB Output is correct
14 Correct 3 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 132 ms 8568 KB Output is correct
2 Correct 108 ms 10344 KB Output is correct
3 Correct 111 ms 10436 KB Output is correct
4 Correct 102 ms 10040 KB Output is correct
5 Correct 107 ms 10060 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 3 ms 340 KB Output is correct
12 Correct 3 ms 340 KB Output is correct
13 Correct 3 ms 340 KB Output is correct
14 Correct 3 ms 340 KB Output is correct
15 Correct 132 ms 8568 KB Output is correct
16 Correct 108 ms 10344 KB Output is correct
17 Correct 111 ms 10436 KB Output is correct
18 Correct 102 ms 10040 KB Output is correct
19 Correct 107 ms 10060 KB Output is correct
20 Correct 102 ms 10196 KB Output is correct
21 Correct 104 ms 10192 KB Output is correct
22 Correct 101 ms 10100 KB Output is correct
23 Correct 102 ms 10100 KB Output is correct
24 Correct 114 ms 10016 KB Output is correct