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. Mysql 允许null 与 default值

    分为下面4种情况: 1.允许null, 指定default值. 2.允许null, 不指定default,这个时候可认为default值就是null 3.不允许null,指定default值,不能指定 ...

  2. datatables使用

    //4.多列排序 //示例:http://www.guoxk.com/html/DataTables/Multi-column-sorting.html //5.隐藏某些列 $(document).r ...

  3. 高质量JavaScript代码书写基本要点

    翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...

  4. [Selenium]点击Calendar控件后,Calendar dialog很快消失

    有的日历控件使用了“opacity:0”透明度加上“display:none”来控制其是否显示,使用moveToElement方法不能移动到dialog上,可以把这两个属性的值进行修改,使其可见,使用 ...

  5. nosql简述

    1.NoSQL数据库概念 NoSQL数据库是非关系型数据库,主要是针对关系型数据库而言,它主要是用来解决半结构化数据和非机构化数据的存储问题. 2.为什么使用NoSQL数据库? (1)对数据库的高并发 ...

  6. easyui 查询

    <fieldset> <legend>查询</legend> <table style="width: 100%;"> <tr ...

  7. retrifit

    Retrofit 特点 性能最好,处理最快 使用REST API时非常方便: 传输层默认就使用OkHttp: 支持NIO: 拥有出色的API文档和社区支持 速度上比volley更快: 如果你的应用程序 ...

  8. java 异常2

    自定义异常类: import java.util.Scanner; /** * Created by lenovo on 2016/8/12. */ class NoMoneyException ex ...

  9. 精简android4.2

    cd /system/apprm YouTube.*rm Settings.*rm VoiceDialer.*rm Phone.*rm QuickSearchBox.*rm RSSReader.*rm ...

  10. java线程中断和终止线程运行

    ava中启动一个线程很容易,通常情况下我们都是等到任务运行结束后让线程自行停止.但有时需要在任务正在运行时取消他们,使得线程快速结束.对此Java并没有提供任何机制.但是我们可以通过Java提供的线程 ...