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. Python学习(4)运算符

    目录 Python 算术运算符 Python 比较运算符 Python 赋值运算符 Python 位运算符 Python 逻辑运算符 Python 成员运算符 Python 身份运算符 Python  ...

  2. JS 对象(Object)和字符串(String)互转

    利用原生JSON对象,将对象转为字符串 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; jsObj.date = ...

  3. Python中的join()函数split()函数

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下:     join():    连接字符串数组.将字符串.元组.列表中的元素以指定的 ...

  4. (六)ARM状态寄存器-PSR

    ARM程序状态寄存器Program State Register 在ARM模式中, 有16个数据寄存器和1或2个状态寄存器是可以随时访问的.在特权模式 (privileged mode) 下, 对应的 ...

  5. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  6. pdmreader支持读取xml格式的pdm文件,无法读取二进制格式的pdm文件。

    您的Pdm数据字典文件可能不被PDMReader读取,可能是因为pdm文件版本的问题.但 您可以通过PowerDesigner12(下载PowerDesigner12)进行转换 后进行读取. 您要做的 ...

  7. 转!!JavaBean,List,Map转成json格式

    public class User { private String username; private String password; public String getUsername() { ...

  8. hiho1099_constellation

    题目 一 个NxM(N, M <= 1000)的矩阵形成星空,矩阵中的点有两种字符,'#'代表星星,'.'代表空白,星空中的星星最多5000个:给出K(K<=20)个星图,每 个星图都是H ...

  9. Canu Quick Start(快速使用Canu)

    Canu Quick Start Canu Quick Start PBcR (老版的canu) CA Canu specializes in(专门从事) assembling PacBio or O ...

  10. js将long日期格式转换为标准日期格式

    <script language="javascript"> //扩展Date的format方法 Date.prototype.format = function (f ...