日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POJ 3225 线段树+lazy标记

發(fā)布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POJ 3225 线段树+lazy标记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

lazy寫崩了…….

查了好久

/*
U—> [l,r]–>1
I—> [1,l-1] [r+1,+無窮] –>0
D—> [l,r]–>0
C—> [1,l-1] [r+1,+無窮]–>0 xor[l,r]
S—> [l,r]–>xor
*/

//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define maxn 140000 struct Tree{int lazy;bool cover;Tree(){lazy=-1;}}tree[maxn*16];//=0 不選 =1 選 =2 xor int xx,yy,vis[maxn*2]; char op,Left,Right,f; void push_down(int pos){int lson=pos<<1,rson=pos<<1|1;if(tree[pos].lazy==2){if(tree[lson].lazy==-1)tree[lson].lazy=2,tree[lson].cover=!tree[lson].cover;else if(tree[lson].lazy==2)tree[lson].lazy=-1,tree[lson].cover=!tree[lson].cover;else tree[lson].lazy=!tree[lson].lazy,tree[lson].cover=!tree[lson].cover;if(tree[rson].lazy==-1)tree[rson].lazy=2,tree[rson].cover=!tree[rson].cover;else if(tree[rson].lazy==2)tree[rson].lazy=-1,tree[rson].cover=!tree[rson].cover;else tree[rson].lazy=!tree[rson].lazy,tree[rson].cover=!tree[rson].cover;}else tree[lson].cover=tree[rson].cover=tree[pos].lazy,tree[lson].lazy=tree[rson].lazy=tree[pos].lazy;tree[pos].lazy=-1; } void update(int l,int r,int pos,int L,int R,int id){if(l>=L&&r<=R){if(id!=2)tree[pos].cover=id,tree[pos].lazy=id;else{if(tree[pos].lazy==-1)tree[pos].lazy=2;else if(tree[pos].lazy==2)tree[pos].lazy=-1;else tree[pos].lazy=!tree[pos].lazy;tree[pos].cover=!tree[pos].cover;}return;}if(~tree[pos].lazy)push_down(pos);int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;if(mid>=R)update(l,mid,lson,L,R,id);else if(mid<L)update(mid+1,r,rson,L,R,id);else update(l,mid,lson,L,R,id),update(mid+1,r,rson,L,R,id); } void query(int l,int r,int pos,int x){if(~tree[pos].lazy)push_down(pos);if(l==r){vis[l]=tree[pos].cover;return;}int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;if(mid>=x)query(l,mid,lson,x);else query(mid+1,r,rson,x); } int main(){while(scanf("%c %c%d,%d%c",&op,&Left,&xx,&yy,&Right)!=EOF){xx<<=1,yy<<=1;if(Left=='(')xx++;if(Right==')')yy--;if(xx>yy)xx=yy=maxn-1;if(op=='U')update(0,maxn,1,xx,yy,1);else if(op=='I'){if(xx)update(0,maxn,1,0,xx-1,0);update(0,maxn,1,yy+1,maxn,0);}else if(op=='D')update(0,maxn,1,xx,yy,0);else if(op=='C'){if(xx)update(0,maxn,1,0,xx-1,0);update(0,maxn,1,yy+1,maxn,0);update(0,maxn,1,xx,yy,2);}else if(op=='S')update(0,maxn,1,xx,yy,2);getchar();}for(int i=0;i<maxn;i++)query(0,maxn,1,i);xx=-1;for(int i=0;i<135000;i++){if(vis[i]&&~xx)yy=i;else if(!vis[i]){if(~xx){if(f)printf(" ");if(!f)f=1;if(xx&1)putchar('(');else putchar('[');printf("%d,%d",xx>>1,(yy+1)>>1);if(yy&1)putchar(')');else putchar(']');}xx=-1;}else if(vis[i]&&xx==-1)xx=yy=i;}if(!f)printf("empty set"); }

轉(zhuǎn)載于:https://www.cnblogs.com/SiriusRen/p/6532283.html

總結(jié)

以上是生活随笔為你收集整理的POJ 3225 线段树+lazy标记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。