题目大意:

  有5种运算维护集合S(S初始为空)并最终输出S。

  5种运算如下:

U T   S∪T

I T  S∩T

D T   S-T

C T  T-S

S T  S⊕T

  基本集合运算如下:

A∪B  {x : xÎA or xÎB}

A∩B  {x : xÎA and xÎB}

A-B  {x : xÎA and xÏB}

A⊕B  (A-B)∪(B-A)

思路:

  每个数之间加入一个数,就像这样2 2.5 3 3.5 4 [2,3) -> [2,2.5] (3,4] -> [3.5,4] 用01表示集合,则U 区间涂1;I 两侧区间涂0;D 区间涂0;C 两侧涂0,中间取反;S 区间取反。用线段树解决,标记的下传很重要(被坑了)。

代码:

 #include<cstdio>
#include<iostream>
#define n 131073
using namespace std; int lazy[n<<],num[n<<],rev[n<<]; int read()
{
int x=,y=;
char ch=getchar();
while (ch<'' || ch>'')
{
if (ch=='(') y=;
ch=getchar();
}
while (ch>='' && ch<='')
{
x=x*+ch-;
ch=getchar();
}
if (ch==')') y=-;
return x*+y+;
} void push_down(int x,int l,int r)
{
int y=lazy[x],z=rev[x];
lazy[x]=-,rev[x]=;
if (l==r)
{
if (y!=-) num[x]=y;
num[x]^=z;
return;
}
if (y!=-)
{
lazy[x<<]=lazy[x<<|]=y;
rev[x<<]=rev[x<<|]=;
}
rev[x<<]^=z,rev[x<<|]^=z;
} void add(int L,int R,int l,int r,int cur,int val)
{
if (l>r) return;
push_down(cur,L,R);
if (l<=L && r>=R)
{
if (val<) lazy[cur]=val;
else rev[cur]^=;
return;
}
int mid=L+R>>;
if (l>mid) add(mid+,R,l,r,cur<<|,val);
else if (r<=mid) add(L,mid,l,r,cur<<,val);
else add(L,mid,l,mid,cur<<,val),add(mid+,R,mid+,r,cur<<|,val);
} int ask(int l,int r,int x,int cur)
{
push_down(cur,l,r);
if (l==r) return num[cur];
int mid=l+r>>;
if (x<=mid) return ask(l,mid,x,cur<<);
else return ask(mid+,r,x,cur<<|);
} int main()
{
char ch[];
for (int i=;i<=n*;i++) lazy[i]=-;
while (scanf("%s",ch)!=EOF)
{
int a=read(),b=read();
if (ch[]=='U') add(,n,a,b,,);
if (ch[]=='I') add(,n,,a-,,),add(,n,b+,n,,);
if (ch[]=='D') add(,n,a,b,,);
if (ch[]=='C') add(,n,,a-,,),add(,n,a,b,,),add(,n,b+,n,,);
if (ch[]=='S') add(,n,a,b,,);
}
int h=,t=,flag=;
for (int i=;i<=n;i++)
if (ask(,n,i,))
{
if (!h) h=i;
t=i;
}
else
{
if (h)
{
if (flag) printf(" ");
else flag=;
if (h&) printf("(");
else printf("[");
printf("%d,%d",h/-,(t+)/-);
if (t&) printf(")");
else printf("]");
}
h=t=;
}
if (!flag) printf("empty set");
else printf(" ");
return ;
}

BZOJ3226[Sdoi2008]校门外的区间 题解的更多相关文章

  1. [bzoj3226][Sdoi2008]校门外的区间——线段树

    题目 略 题解 直接套黄学长模板. Orz 代码 #include <bits/stdc++.h> using namespace std; #define ll long long #d ...

  2. 【分块】bzoj3226 [Sdoi2008]校门外的区间

    题解见 : http://blog.csdn.net/iamzky/article/details/41088151 ORZ ZKY 2个懒标记:是否翻转,覆盖成了什么. 怎么处理一个块上有两个标记的 ...

  3. BZOJ3226: [Sdoi2008]校门外的区间

    感觉很有趣的题呢. 每个点拆成两个,线段树维护. 不过这题难点其实在输入输出. #include<bits/stdc++.h> #define N (1<<17) #defin ...

  4. bzoj 3226 [Sdoi2008]校门外的区间(线段树)

    3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 615  Solved: 227[Submit][Stat ...

  5. 3226. [SDOI2008]校门外的区间【线段树】

    Description   受校门外的树这道经典问题的启发,A君根据基本的离散数学的知识,抽象出5种运算维护集合S(S初始为空)并最终输出S.现在,请你完成这道校门外的树之难度增强版——校门外的区间. ...

  6. 「BZOJ3226」[Sdoi2008]校门外的区间

    题目 首先是开闭区间的处理,我们把\(1.5\)这种数加进来,用\([1.5,6]\)来表示\((2,6]\) 根据离散数学的基本知识,尝试把五个操作转化成人话 把\([x,y]\)变成\(1\) 把 ...

  7. BZOJ 3226: [Sdoi2008]校门外的区间

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3226 题意:初始集合S为空.模拟四种集合操作:集合并.交.差.补集并. 思路:区间 ...

  8. 3226: [Sdoi2008]校门外的区间

    链接 思路 bug漫天飞... 维护一颗线段树,支持区间赋值,和区间异或.因为会处理到一些方括号还是圆括号的问题,所以对于每一个下标都乘2,假设中间有一个.5即可,都变成了方括号,输出在处理一下. U ...

  9. [SDOI2008] 校门外的区间 - 线段树

    U T 即将区间 \(T\) 范围赋值为 \(1\) I T 即将区间 \(U - T\) 范围赋值为 \(0\) D T 即将区间 \(T\) 赋值为 \(0\) C T 由于 \(S=T-S=T( ...

随机推荐

  1. 三、jQuery--jQuery基础--jQuery基础课程--第1章 初识jQuery

    环境搭建 搭建一个jQuery的开发环境非常方便,可以通过下列几个步骤进行. 下载jQuery文件库 在jQuery的官方网站(http://jquery.com)中,下载最新版本的jQuery文件库 ...

  2. json_encode() 和 json_decode()

    php json_decode返回数据js的处理,json_decode后,返回到前台的数据如:encode_str => {"green":10,"size&qu ...

  3. 个推+DCLOUD,推送消息和透传消息

    DCLOUD方案中集成了个推方案,最好是用个推来做推送相关的东西 消息分2类: 1.推送消息,这种一般会出现在手机的最上面的通知栏,用户是肯定会知道的 2.透传消息,这种一般就是一个Alert提示框, ...

  4. Power BI中的QA功能预览

    微软在休斯敦的全球合作伙伴大会上发布了Power BI for Office 365,通过Excel和Office 365中的自服务式商业智能解决方案为信息工作者提供了数据分析以及可视化功能以帮助他们 ...

  5. 一致性hash算法简介与代码实现

    一.简介: 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义: 1.平衡性(Balance) 2.单调性(Monotonicity) 3.分散性(Spread) 4.负 ...

  6. 6-01T-SQL中的运算符

    算术运算符:+.-.*./.%. 赋值运算符:= 逻辑运算符:AND.OR.NOT. 比较运算符:>,<,<=,>=,<>.=,!=. 连接运算符:"+& ...

  7. phpMailer邮件发送

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 免费电子书:C#代码整洁之道

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:<Clean Code(代码整洁之道)>是一本经典的著作,那么对于编写整洁 ...

  9. HR外包系统 - 客户员工 发薪需求/个税需求 设置

    最好,客户公司层面进行设置,如果单一情况,只需要设置公司,如果不是单一情况,设置员工, 另外员工只能从公司设置好的地方选择过来. 增强系统简便设置和设置的灵活性.

  10. WPF初学(一)——布局【良好界面的基础】

    由Winform转到WPF的一部分人,很可能忽略掉布局,习惯性的使用固定定位.然而,没有良好的布局,后面界面控件画的再好看,花哨,都不过是鲜花插在牛粪上,很可能始终都是一坨??(呵呵). 闲话少说,首 ...