COGS 1427. zwei
生活随笔
收集整理的這篇文章主要介紹了
COGS 1427. zwei
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
★☆?? 輸入文件:zwei.in?? 輸出文件:zwei.out???簡(jiǎn)單對(duì)比
時(shí)間限制:1 s?? 內(nèi)存限制: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
【提示】
?
對(duì)于100%的數(shù)據(jù) 0 < n < 10^5,? 0 < m < 10^5,? 0 < ai,y < 10^9,? 1 < x,l,r < n
對(duì)于40%的數(shù)據(jù) 0 < n < 1000,0 < m < 1000
?
?線段樹
?單點(diǎn)修改,區(qū)間查詢
?屠龍寶刀點(diǎn)擊就送
#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; }?
轉(zhuǎn)載于:https://www.cnblogs.com/ruojisun/p/6624272.html
總結(jié)
以上是生活随笔為你收集整理的COGS 1427. zwei的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面试题----几种数组去重方式
- 下一篇: 【Node】node.js实现服务器的反