【POJ】3225 Help with Intervals
2012-05-22 11:43
399 查看
#include<cstdio> #include<cstring> #define MAXN 131080 #define INF 987654321 int lazy[MAXN<<2],cover[MAXN<<2]; bool vis[MAXN<<1]; inline void FXOR(int rt) { if(cover[rt]!=-1) { cover[rt]^=1; lazy[rt]=0; } else lazy[rt]^=1; } inline void PushDown(int rt) { if(cover[rt]!=-1) { cover[rt<<1]=cover[rt<<1|1]=cover[rt]; lazy[rt<<1]=lazy[rt<<1|1]=0; cover[rt]=-1; } else if(lazy[rt]) { FXOR(rt<<1); FXOR(rt<<1|1); lazy[rt]=0; } } void Change(int x,int y,int L,int R,int rt) { if(x<=L&&R<=y) FXOR(rt); else { int mid=(L+R)>>1; PushDown(rt); if(mid>=x) Change(x,y,L,mid,rt<<1); if(y>mid) Change(x,y,mid+1,R,rt<<1|1); } } void Update(int x,int y,int val,int L,int R,int rt) { if(x<=L&&R<=y) { lazy[rt]=0; cover[rt]=val; } else { int mid=(L+R)>>1; PushDown(rt); if(mid>=x) Update(x,y,val,L,mid,rt<<1); if(y>mid) Update(x,y,val,mid+1,R,rt<<1|1); } } void Query(int L,int R,int rt) { if(cover[rt]==1) { for(int i=L;i<=R;i++) vis[i]=true; } else if(cover[rt]==-1&&L!=R) { int mid=(L+R)>>1; PushDown(rt); Query(L,mid,rt<<1); Query(mid+1,R,rt<<1|1); } } int main() { char ch,left,right; int x,y,i,j; bool flag; memset(cover,0,sizeof(cover)); memset(lazy,0,sizeof(lazy)); while(~scanf(" %c %c%d,%d %c",&ch,&left,&x,&y,&right)) { x<<=1; y<<=1; if(left=='(') x++; if(right==')') y--; if(x>y) continue; if(ch=='U') Update(x,y,1,0,MAXN,1); else if(ch=='I') { if(x>0) Update(0,x-1,0,0,MAXN,1); if(y<MAXN) Update(y+1,MAXN,0,0,MAXN,1); } else if(ch=='D') Update(x,y,0,0,MAXN,1); else if(ch=='C') { if(x>0) Update(0,x-1,0,0,MAXN,1); if(y<MAXN) Update(y+1,MAXN,0,0,MAXN,1); Change(x,y,0,MAXN,1); } else Change(x,y,0,MAXN,1); } memset(vis,false,sizeof(vis)); Query(0,MAXN,1); flag=false; for(i=0;i<=MAXN;i++) { if(vis[i]) { for(j=i;j<=MAXN&&vis[j];j++); x=i; y=j-1; if(flag) putchar(' '); printf("%c%d,%d%c",x&1?'(':'[',x>>1,(y+1)>>1,y&1?')':']'); flag=true; i=j; } } if(flag) putchar('\n'); else puts("empty set"); return 0; }
相关文章推荐
- poj 3225 线段树区间更新,区间询问 Help with Intervals
- POJ 3225 Help with Intervals(线段树成段更新)
- poj 3225 Help with Intervals(线段树进阶,处理区间,拆点)
- POJ 3225 - Help with Intervals
- poj 3225 Help with Intervals(线段树+区间的交集,差集,补集,并集)好难的题目,一天了,真是纠结
- POJ 3225 Help with Intervals 线段树
- POJ 3225 Help with Intervals(区间更新 + 倍增区间)
- poj 3225 Help with Intervals(线段树)
- POJ 3225 Help with Intervals
- POJ 3225 Help with Intervals(线段树)
- POJ 3225 Help with Intervals
- poj 3225 Help with Intervals
- POJ 3225 Help with Intervals(线段树)
- poj 3225 Help with Intervals(线段树)
- poj 3225 Help with Intervals(线段树区间更新)
- POJ 3225 Help with Intervals(开区间和闭区间)
- poj 3225 Help with Intervals -线段树-延迟标记-区间交并补
- POJ 3225 - Help with Intervals
- poj 3225 Help with Intervals
- POJ 3225 Help with Intervals --线段树区间操作