记录编号 |
96218 |
评测结果 |
AAAAAAAAAA |
题目名称 |
zwei |
最终得分 |
100 |
用户昵称 |
Dijkstra |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.979 s |
提交时间 |
2014-04-11 17:08:25 |
内存使用 |
3.75 MiB |
显示代码纯文本
#include<fstream>
using namespace std;
ifstream fin("zwei.in");
ofstream fout("zwei.out");
int t[800000]={0},L,m,x,y,n[100001]={0},mark,s=0;
void BUILD(int l,int r,int p)
{
int m=(l+r)/2;
if(l==r)
{
t[p]=n[l];
return;
}
BUILD(l,m,2*p);
BUILD(m+1,r,2*p+1);
t[p]=t[2*p]^t[2*p+1];
}
void SET(int l,int r,int p)
{
int m=(l+r)/2;
if(l==r&&l==x)
{
t[p]=y;
return;
}
if(x<=m) SET(l,m,2*p);
if(x>m) SET(m+1,r,2*p+1);
t[p]=t[2*p]^t[2*p+1];
}
void OXR(int l,int r,int p)
{
int m=(l+r)/2;
if(l>=x&&r<=y)
{
s=s^t[p];
return;
}
if(x<=m) OXR(l,m,2*p);
if(y>m) OXR(m+1,r,2*p+1);
}
int main()
{
fin>>L>>m;
int i;
for(i=1;i<=L;i++)fin>>n[i];
BUILD(1,L,1);
for(i=1;i<=m;i++)
{
fin>>mark>>x>>y;
if(!mark) SET(1,L,1);
if(mark)
{
s=0;
OXR(1,L,1);
fout<<s<<endl;
}
}
return 0;
}