POJ 3225 Help with Intervals
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的更多相关文章
- POJ 3225 Help with Intervals(线段树)
POJ 3225 Help with Intervals 题目链接 集合数字有的为1,没有为0,那么几种操作相应就是置为0或置为1或者翻转,这个随便推推就能够了,然后开闭区间的处理方式就是把区间扩大成 ...
- poj 3225 Help with Intervals(线段树,区间更新)
Help with Intervals Time Limit: 6000MS Memory Limit: 131072K Total Submissions: 12474 Accepted: ...
- (中等) POJ 3225 Help with Intervals , 线段树+集合。
Description LogLoader, Inc. is a company specialized in providing products for analyzing logs. While ...
- POJ 3225 Help with Intervals --线段树区间操作
题意:给你一些区间操作,让你输出最后得出的区间. 解法:区间操作的经典题,借鉴了网上的倍增算法,每次将区间乘以2,然后根据区间开闭情况做微调,这样可以有效处理开闭区间问题. 线段树维护两个值: cov ...
- ●线段树的三个题(poj 3225,hdu 1542,hdu 1828)
●poj 3225 Help with Intervals(线段树区间问题) ○赘述题目 给出以下集合操作: 然后有初始的一个空集S,和以下题目给出的操作指令,并输入指令: 要求进行指令操作后,按格式 ...
- poj 3225 【线段树】
poj 3225 这题是用线段树解决区间问题,看了两天多,算是理解一点了. Description LogLoader, Inc. is a company specialized in provid ...
- 【POJ 1716】Integer Intervals(差分约束系统)
id=1716">[POJ 1716]Integer Intervals(差分约束系统) Integer Intervals Time Limit: 1000MS Memory L ...
- POJ 3225 (线段树 区间更新) Help with Intervals
这道题搞了好久,其实坑点挺多.. 网上找了许多题解,发现思路其实都差不多,所以就不在重复了. 推荐一篇比较好的题解,请戳这. 另外,如果因为可能要更新多次,但最终查询只需要一次,所以没有写pushup ...
- poj 3225 间隙(横截面和填充操作)
http://poj.org/problem?id=3225 一道题又做了一天. .这道题对我来说起初有N多难点. 1:区间的开闭怎样解决. . 2:如何把区间的交并补.对称差转化为对线段树的操作. ...
随机推荐
- 07 concurrency and Multi-version
本章提要---------------------------------------------------------对并发和锁的进一步补充并发控制事务的隔离级别多版本控制读一致性的含义写一致性- ...
- android平台的技术架构
Android平台采用了软件堆层(Software Stack)的架构,主要分为四个部分: 1.应用软件 Android 连同一个核心应用程序包一起发布,该应用程序包包括E-mail客户端.SMS短消 ...
- 工作流学习——Activiti流程变量五步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46648139 ***************************************** ...
- iOS开发 在scrollView上增加滑动手势(Pan)
view上有一个scrollView,现在想在view上加一个Pan手势,需求是:当向下划的时候,整个view动,但是scrollView不动:其它情况下scrollView动而view不动. -(B ...
- PacBio软件总览 - 初级分析
PacBio® RS Software Overview PacBio运行的整个流程是什么?每一步都用到了什么软件? PacBio软件套件 RS Remote:Design runs remotely ...
- ajax中向HTML页面中指定位置添加信息
$.ajax({ type : "POST", beforeSend : function() { showLoader("数据加载中...");// ...
- appium支持中文输入
Appium 1.3.3以上.java:capabilities增加下面两项:capabilities.setCapability("unicodeKeyboard", " ...
- sessionStorage
for(i=0;i<tkt.length;i++){ if(tkt[i].redEnvelopeType==1){ full1+="<div class='pic_01' id= ...
- html5中的一些新语义标签
<header> <nav> <ul> <li><a href="">栏目1</a></li> ...
- Android Drawable资源
Android实现应用d动画效果:比如App第一次打开的开始动画等 有两种:GIF动画和代码实现. 第一种:借助于Gif制作工具软件实现.一般是和第三方开源的GifView(https://githu ...