poj-3225-Help with Intervals
来源:互联网 发布:南风知我意七微书包网1 编辑:程序博客网 时间:2024/05/18 14:15
超级恶心的一道题目。。。
查错查了一个小时。。。。
1,要用C++,用G++会wa。
2,注意检查边界。
3,注意标记的下放方式。
#include<stdio.h>#include<iostream>#include<stdlib.h>#include<string.h>#include<algorithm>#include<vector>#include<math.h>#include<map>#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;#define maxn 200000#define mem(a,b) (memset(a),b,sizeof(a))#define lmin 0#define rmax n#define lson l,(l+r)/2,rt<<1#define rson (l+r)/2+1,r,rt<<1|1#define root lmin,rmax,1#define now l,r,rt#define int_now int l,int r,int rt#define INF 99999999#define LL __int64#define mod 10007#define eps 1e-6#define zero(x) (fabs(x)<eps?0:x)int rev[maxn*4];int val[maxn*4];int ans[maxn];void push_down(int_now){ if(val[rt]!=-1) { val[rt<<1]=val[rt<<1|1]=val[rt]; rev[rt<<1]=rev[rt<<1|1]=rev[rt]; rev[rt]=0; val[rt]=-1; } if(rev[rt]) { if(val[rt<<1]!=-1)val[rt<<1]^=1; else rev[rt<<1]^=1; if(val[rt<<1|1]!=-1)val[rt<<1|1]^=1; else rev[rt<<1|1]^=1; rev[rt]=0; }}void updata(int ll,int rr,int x,int_now){ if(ll>r||rr<l)return; if(ll<=l&&rr>=r) { val[rt]=x; rev[rt]=0; return; } push_down(now); updata(ll,rr,x,lson); updata(ll,rr,x,rson);}void fan(int ll,int rr,int_now){ if(ll>r||rr<l)return; if(ll<=l&&rr>=r) { if(val[rt]!=-1)val[rt]^=1; else rev[rt]^=1; return; } push_down(now); fan(ll,rr,lson); fan(ll,rr,rson);}void query(int_now){ if(l==r) { if(val[rt]==1)ans[l]=1; return; } push_down(now); query(lson); query(rson);}int main(){ int n=65537*2; char ch[100]; char le,ri; int l,r; while(scanf("%s%*c%c%d,%d%c%*c",ch,&le,&l,&r,&ri)!=EOF) { if(ch[0]=='e')break; l=l*2; r=r*2; if(le=='(')l=l+1; if(ri==')')r=r-1; if(ch[0]=='U') { updata(l,r,1,root); } if(ch[0]=='I') { if(l-1>=0)updata(0,l-1,0,root); updata(r+1,n,0,root); } if(ch[0]=='D') { updata(l,r,0,root); } if(ch[0]=='C') { if(l-1>=0)updata(0,l-1,0,root); updata(r+1,n,0,root); fan(l,r,root); } if(ch[0]=='S') { fan(l,r,root); } } query(root); int flag=0; l=r=-1; for(int i=0;i<=n;i++) { if(ans[i]) { if(l==-1) { l=i; if(flag)printf(" "); if(l%2)printf("(%d",l/2); else printf("%[%d",l/2); flag++; } } else { if(l!=-1) { r=i-1; if(r%2)printf(",%d)",r/2+1); else printf(",%d]",r/2); flag++; l=r=-1; } } } if(flag==0) { printf("empty set"); } puts(""); return 0;}
0 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[线段树]
- destoon URL Rewrite(伪静态)设置方法
- Firebird常用系统表Sql语句
- 4-0. 求符合给定条件的整数集(15)
- AndroidManifest.xml文件详解
- javascript正则表达式分组的小例子
- poj-3225-Help with Intervals
- 回文字符串判断(栈练习)
- googlecode svn服务器代理设置
- 第十六周自由练习项目——acm C++复数运算符重载(+与<<)
- 【黑马程序员】java基础_正则表达式
- Unable to compile class for JSP 错误的解决过程
- bug 非Activity中使用startActivity
- pkg_info 命令使用方法
- js+jquery动态设置/增加/删除/获取元素属性的两种方法集锦对比(动态onclick属性设置+动态title设置)