poj3225 线段树区间操作 (见鬼)
2014-04-10 22:15
225 查看
细节处理实在太重要了。
#include<cstdio> #include<cstring> #define MT 65533*4 #define Maxn MT*4 int i,x,y,now,k; int xo[Maxn],e[Maxn],pd[MT]; char a,b,c; inline void work(int k,int rt){ if(k<2){ xo[rt]=0; e[rt]=k; }else{ if(e[rt]>-1) e[rt]^=1; else xo[rt]^=1; } } void PushDown(int rt){ if(e[rt]>-1){ e[rt*2+1]=e[rt*2]=e[rt]; e[rt]=-1; } else{ if(e[rt*2]>-1) {e[rt*2]^=xo[rt]; xo[rt*2]=0;} else xo[rt*2]^=xo[rt]; if(e[rt*2+1]>-1) {e[rt*2+1]^=xo[rt];xo[rt*2+1]=0;} else xo[rt*2+1]^=xo[rt]; } xo[rt]=0; } void ins(int k,int x,int y,int l,int r,int rt){ if(x<=l&&y>=r){ work(k,rt); return; } PushDown(rt); int m=(l+r)/2; if(x<=m) ins(k,x,y,l,m,rt*2); if(y>m) ins(k,x,y,m+1,r,rt*2+1); } void query(int l,int r,int rt){ if(e[rt]==1) { for(int i=l;i<=r;i++) pd[i]=1; return; } if(e[rt]==0) return; if(l>=r) return; PushDown(rt); int m=(l+r)/2; query(l,m,rt*2); query(m+1,r,rt*2+1); } int main() { while(scanf("%c %c%d,%d%c\n",&a,&b,&x,&y,&c)!=EOF){ if(b=='[') x=2*x; else x=2*x+1; if(c==']') y=2*y; else y=2*y-1; switch (a){ case 'U': ins(1,x,y,0,MT,1); break; case 'I': ins(0,0,x-1,0,MT,1); ins(0,y+1,MT,0,MT,1); break; case 'D': ins(0,x,y,0,MT,1); break; case 'C': ins(0,0,x-1,0,MT,1); ins(0,y+1,MT,0,MT,1); ins(2,x,y,0,MT,1); break; case 'S': ins(2,x,y,0,MT,1); break; } } query(0,MT,1); k=0; for(i=0;i<MT;i++) if(1==pd[i]){ if(0==i||pd[i-1]==0){ if(i%2==0) printf("[%d",i/2); else printf("(%d",(i-1)/2); } if(MT-1==i||pd[i+1]==0){ if(i%2==0) printf(",%d] ",i/2); else printf(",%d) ",(i+1)/2); } k=1; } if(!k) printf("empty set\n"); return 0; }
相关文章推荐
- 线段树区间维护(各种操作)hdu2871
- hihocoder 1080 更为复杂的买卖房屋姿势(线段树经典操作,区间修改,add+set标记)
- Count the Colors -----超详细的线段树的区间染色题解(线段树原来操作可以这么骚Q&_&Q)
- POJ 3225 Help with Intervals 线段树区间操作
- ZOJ 3911 Prime Query(线段树区间操作)
- Sequence operation(线段树区间多种操作)
- POJ 3468 A Simple Problem with Integers(线段树区间操作)
- hdu3911 Black And White 【线段树+区间异或操作】
- zoj 3886 Nico Number(线段树,区间取模操作)
- hdu 3577 线段树区间操作(带有懒操作)
- hdu 1698 Just a Hook (线段树区间操作,)
- 一道线段树维护区间操作的题 soj4234 01Pairs
- Uva 11992 Fast Matrix Operations(线段树区间设值与加操作)
- 线段树区间更新操作及Lazy思想(详解)
- poj 1177 又是一道十分恶心到线段树。 主要是用线段树到区间操作。可以用来节省线性查找的时间。 离散化也十分好的一道题。
- Necklace (线段树单点更新+区间查询+离线操作)
- 蓝桥杯算法训练_格子操作_线段树_区间和与区间最值
- 树链剖分(线段树区间更新求和(lazy操作)hdu3966)
- uva 1401 Fast Matrix Operations 快速矩阵操作 (线段树 区间修改和查询)
- 蓝桥 操作格子 线段树 单点更新 区间查询