U:把区间[l,r]覆盖成1
I:把[0,l-1][r+1,∞]覆盖成0
D:把区间[l,r]覆盖成0
C:把[0,l-1][r+1,∞]覆盖成0 , 且[l,r]区间0/1互换(即异或)
S:[l,r]区间0/1互换

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include <iostream>
#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define debug(x) printf(#x"= %d\n",x);
#define N 140000
using namespace std;
int Val[N*],Xor[N*];
bool mark[N];
const int maxn =(<<);
void build(int l,int r,int i)
{
Val[i]=-;
Xor[i]=;
if(l!=r)
{
int mid=(l+r)>>;
build(l,mid,L(i));
build(mid+,r,R(i));
}
}
void pushdown(int i)
{
if(Val[i]!=-)
{
Xor[L(i)]=Xor[R(i)]=;
Val[L(i)]=Val[R(i)]=Val[i];
Val[i]=-;
}
if(Xor[i])
{
Xor[L(i)]^=;
Xor[R(i)]^=;
Xor[i]=;
}
}
void update(int l,int r,int pl,int pr,int type,int va,int i)
{
if(l>=pl&&r<=pr)
{
if(type==){Xor[i]=;Val[i]=va;return;}
else {
Xor[i]^=;
return;
}
}
pushdown(i);
int mid=(l+r)>>;
if(pl<=mid)update(l,mid,pl,pr,type,va,L(i));
if(pr>mid)update(mid+,r,pl,pr,type,va,R(i));
}
void query(int l,int r,int i)
{
if(l==r)
{
if(Val[i]==-)Val[i]=;
Val[i]^=Xor[i];
if(Val[i])
mark[l]=true;
return ;
}
pushdown(i);
int mid=(l+r)>>;
query(l,mid,L(i));
query(mid+,r,R(i));
}
void solve(int l,int r,int pl,int pr,char type)
{
if(type=='U')update(l,r,pl,pr,,,);
else if(type=='I'){
if(pl->=)
update(l,r,,pl-,,,);
update(l,r,pr+,maxn,,,);
}
else if(type=='D'){
update(l,r,pl,pr,,,);
}
else if(type=='C'){
if(pl->=)
update(l,r,,pl-,,,);
update(l,r,pr+,maxn,,,);
update(l,r,pl,pr,,,);
}
else
{
update(l,r,pl,pr,,,);
} } int main() {
char a,b,c,d;
int l,r;
build(,maxn,);
while(scanf(" %c %c %d %c %d %c",&a,&b,&l,&c,&r,&d)!=EOF)
{
l<<=;
r<<=;
if(b=='(')l++;
if(d==')')r--;
if(l>r)
{
if(a=='I'||a=='C')
{
Val[]=Xor[]=;
}
}
else
solve(,maxn,l,r,a);
}
memset(mark,,sizeof(mark));
query(,maxn,);
int st,ed;
st=ed=-;
int first=;
for(int i=;i<=maxn;++i)
{
if(mark[i]){
if(st==-)st=i;
ed=i;
}
else if(st!=-)
{
if(!first)
printf(" ");
if(st&)printf("(");
else printf("[");
printf("%d,%d",(st>>),((ed+)>>));
if(ed&)printf(")");
else printf("]");
st=-;
first=;
}
}
if(first)printf("empty set");
puts("");
return ;
}

POJ 3225 Help with Intervals的更多相关文章

  1. POJ 3225 Help with Intervals(线段树)

    POJ 3225 Help with Intervals 题目链接 集合数字有的为1,没有为0,那么几种操作相应就是置为0或置为1或者翻转,这个随便推推就能够了,然后开闭区间的处理方式就是把区间扩大成 ...

  2. poj 3225 Help with Intervals(线段树,区间更新)

    Help with Intervals Time Limit: 6000MS   Memory Limit: 131072K Total Submissions: 12474   Accepted:  ...

  3. (中等) POJ 3225 Help with Intervals , 线段树+集合。

    Description LogLoader, Inc. is a company specialized in providing products for analyzing logs. While ...

  4. POJ 3225 Help with Intervals --线段树区间操作

    题意:给你一些区间操作,让你输出最后得出的区间. 解法:区间操作的经典题,借鉴了网上的倍增算法,每次将区间乘以2,然后根据区间开闭情况做微调,这样可以有效处理开闭区间问题. 线段树维护两个值: cov ...

  5. ●线段树的三个题(poj 3225,hdu 1542,hdu 1828)

    ●poj 3225 Help with Intervals(线段树区间问题) ○赘述题目 给出以下集合操作: 然后有初始的一个空集S,和以下题目给出的操作指令,并输入指令: 要求进行指令操作后,按格式 ...

  6. poj 3225 【线段树】

    poj 3225 这题是用线段树解决区间问题,看了两天多,算是理解一点了. Description LogLoader, Inc. is a company specialized in provid ...

  7. 【POJ 1716】Integer Intervals(差分约束系统)

    id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS   Memory L ...

  8. POJ 3225 (线段树 区间更新) Help with Intervals

    这道题搞了好久,其实坑点挺多.. 网上找了许多题解,发现思路其实都差不多,所以就不在重复了. 推荐一篇比较好的题解,请戳这. 另外,如果因为可能要更新多次,但最终查询只需要一次,所以没有写pushup ...

  9. poj 3225 间隙(横截面和填充操作)

    http://poj.org/problem?id=3225 一道题又做了一天. .这道题对我来说起初有N多难点. 1:区间的开闭怎样解决. . 2:如何把区间的交并补.对称差转化为对线段树的操作. ...

随机推荐

  1. nodejs学习笔记<四>处理请求参数

    在web开发中处理请求参数是个非常常见的工作:nodejs提供了了querystring用来处理请求参数. querystring常用方法有:parse,stringify. (1)parse: 解析 ...

  2. Linux设备模型(总线、设备、驱动程序和类)

    Linux设备驱动程序学习(13) -Linux设备模型(总线.设备.驱动程序和类)[转] 文章的例子和实验使用<LDD3>所配的lddbus模块(稍作修改). 提示:在学习这部分内容是一 ...

  3. JAVA必背面试题和项目面试通关要点

    一 数据库 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链接查询和优化问题,手写SQL语句,例如四个球队比赛,用SQL显示所有比赛组合:举例2:选择重复项,然后去掉重复项:) 数据库里 ...

  4. iOS 开发之 Xcode6 创建真机调试证书

    http://jingyan.baidu.com/article/ff411625b8141312e48237a7.html 1.登录苹果开发者中心 2.登录后的界面如图所示,如果没有最上面的两个选项 ...

  5. Android控件之MultiAutoCompleteTextView(自动匹配输入的内容)

    一.功能 可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配,可用在发送短信,发邮件时选择联系人这种类型中 二.独特属性 android:comp ...

  6. 转! java 中“==” 与“ .equals ”比较

    在java程序设计中,经常需要比较两个变量值是否相等.例如1.简单数据类型比较a = 10;b = 10;if(a == b){//写要执行的代码}2.引用数据类型比较ClassA a = new C ...

  7. js 一些技巧

    转自 http://blog.csdn.net/lin49940/article/details/1703533 1. oncontextmenu="window.event.returnV ...

  8. Android Service与Thread的区别

    Android Service,后台,Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程序被关闭,只要进程还在,Service就可以继续运行.比如说一些应用程序 ...

  9. Linq分页查询

    //Linq分页查询 int pageIndex = Convert.ToInt32(HttpContext.Current.Request["PageIndex"]); int ...

  10. WebViewJavascriptBridge-Obj-C和JavaScript互通消息的桥梁

    转载至:http://www.cocoachina.com/ios/20150629/12248.html 译者:@coderyi9 本文翻译自Marcus Westin的开源框架WebViewJav ...