제출 #1188717

#제출 시각아이디문제언어결과실행 시간메모리
1188717mkkkkkkkkXORanges (eJOI19_xoranges)C++20
0 / 100
262 ms7364 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> vec;
pair<int,int> tree[200000*4];

void build(int node,int l,int r)
{
    if(l==r)
    {
        if(l%2==0)
        tree[node].first=vec[l];
        else
            tree[node].second=vec[l];
    }
    else
    {
        int m=(l+r)/2;
        build(node*2+1,l,m);
        build(node*2+2,m+1,r);
        tree[node].first=tree[node*2+1].first^tree[node*2+2].first;
        tree[node].second=tree[node*2+1].second^tree[node*2+2].second;
    }
}

void qu(int node,int i,int x,int l,int r)
{
    if(l==r)
    {
        vec[l]=x;
        if(l%2==0)
        tree[node].first=vec[l];
        else
            tree[node].second=vec[l];
    }
    else
    {
        int m=(l+r)/2;
        if(i<=m)
            qu(node*2+1,i,x,l,m);
        else
            qu(node*2+2,i,x,m+1,r);
        tree[node].first=tree[node*2+1].first^tree[node*2+2].first;
        tree[node].second=tree[node*2+1].second^tree[node*2+2].second;

    }
}

int ask(int node,int l,int r,int L,int R)
{
    if(l>=L && r<=R)
    {
        if(L%2==0)
            return tree[node].first;
        else
            return tree[node].second;
    }
    else if(l>R || r<L)
    {
        return 0;
    }
    else
    {
        if(L%2==0)
            return tree[node*2+1].first^tree[node*2+2].first;
        else
            return tree[node*2+1].second^tree[node*2+2].second;
    }
}


int main()
{
    int n,q;
    cin>>n>>q;
    for(int n1=n;n1>0;n1--)
    {
        int x;
        cin>>x;
        vec.push_back(x);
    }
    build(0,0,vec.size()-1);
    for(;q>0;q--)
    {
        int t;
        cin>>t;
        if(t==1)
        {
            int i,x;
            cin>>i>>x;
            qu(0,i-1,x,0,vec.size()-1);
        }
        else
        {
            int l,r;
            cin>>l>>r;
            cout<<ask(0,0,vec.size()-1,l-1,r-1)<<endl;
        }
    }

    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...