首页 > 代码库 > COGS 1427. zwei
COGS 1427. zwei
★☆ 输入文件:zwei.in
输出文件:zwei.out
简单对比
时间限制:1 s 内存限制:256 MB
??
【样例输入】
5 5 1 2 3 4 5 1 1 3 1 3 5 0 3 6 1 1 3 1 3 5
【样例输出】
0 2 5 7
【提示】
对于100%的数据 0 < n < 10^5, 0 < m < 10^5, 0 < ai,y < 10^9, 1 < x,l,r < n
对于40%的数据 0 < n < 1000,0 < m < 1000
线段树
单点修改,区间查询
屠龙宝刀点击就送
#include <cstdio>#define Max 100000struct node{ int l,r,dis;}tr[Max*4+1];int n,m;void up(int k){ tr[k].dis=tr[k<<1].dis^tr[k<<1|1].dis;}void build(int k,int l,int r){ tr[k].l=l;tr[k].r=r; if(l==r) { scanf("%d",&tr[k].dis); return; } int mid=(l+r)>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r); up(k);}void change(int k,int t,int v){ if(tr[k].l==tr[k].r) { tr[k].dis=v; return; } int mid=(tr[k].l+tr[k].r)>>1; if(mid>=t) change(k<<1,t,v); else change(k<<1|1,t,v); up(k);}int query(int k,int l,int r){ if(tr[k].l==l&&tr[k].r==r) { return tr[k].dis; } int mid=(tr[k].l+tr[k].r)>>1; if(l>mid) return query(k<<1|1,l,r); else if(r<=mid) return query(k<<1,l,r); else return query(k<<1,l,mid)^query(k<<1|1,mid+1,r);}int main(){ freopen("zwei.in","r",stdin); freopen("zwei.out","w",stdout); scanf("%d%d",&n,&m); build(1,1,n); for(int x,y,z;m--;) { scanf("%d%d%d",&x,&y,&z); if(x==0) change(1,y,z); else printf("%d\n",query(1,y,z)); } return 0; }
COGS 1427. zwei
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。