记录编号 75468 评测结果 AAAAAAAAAA
题目名称 zwei 最终得分 100
用户昵称 Gravatar饺子 是否通过 通过
代码语言 C++ 运行时间 0.508 s
提交时间 2013-10-27 21:26:22 内存使用 1.84 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define im int m=(l+r)>>1;
const int lim=100011;
int sumv[lim<<2];
int m,n,a,b,c,x,y;
void pushup(int o,int yuan,int now)
{
    sumv[o]=sumv[o]^yuan^now;
}
void pushup(int o)
{
    sumv[o]=sumv[o<<1]^sumv[o<<1|1];
}
void build(int o,int l,int r)
{
    if(l==r)
    {
        scanf("%d",&sumv[o]);
        return;
    }
    im;
    build(o<<1,l,m);
    build(o<<1|1,m+1,r);
    pushup(o);
}

void update(int o,int l,int r)
{
    if(l==r)
    {
        sumv[o]=y;
        return;
    }
    im;
    if(x<=m)update(o<<1,l,m);
    else update(o<<1|1,m+1,r);
    pushup(o);
}

int query(int o,int l,int r)
{
    if(l>=x&&r<=y)return sumv[o];
    int ret=0;
    im;
    if(x<=m)ret^=query(o<<1,l,m);
    if(y>m)ret^=query(o<<1|1,m+1,r);
    return ret;
}

    

int main()
{
    freopen("zwei.in","r",stdin);
    freopen("zwei.out","w",stdout);
    scanf("%d%d",&m,&n);
    build(1,1,m);
    for(a=1;a<=n;a++)
    {
        scanf("%d%d%d",&b,&x,&y);
        if(b==0)update(1,1,m);
        else cout<<query(1,1,m)<<'\n';
    }
    return 0;
}