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

U T 即将区间 \(T\) 范围赋值为 \(1\)
I T 即将区间 \(U - T\) 范围赋值为 \(0\)
D T 即将区间 \(T\) 赋值为 \(0\)
C T 由于 \(S=T-S=T(U-S)\),即将原状态取反后,将 \(U-T\) 范围赋值为 \(0\)
S T 即将区间 \(T\) 翻转
至于开闭区间,我们不妨把下标缩放到原来的两倍,然后在输入输出的时候讨论一下即可
这题的输入真的挺正常(鬼畜)
#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int a[N],tag[N],rev[N],n,m,t1,t2,t3;
void settag(int p) {
rev[p]=0; tag[p]=1;
}
void setrev(int p) {
rev[p]^=1;
}
void pushdown(int p) {
if(tag[p]) {
tag[p*2]=tag[p*2+1]=1;
rev[p*2]=rev[p*2+1]=0; // Error
tag[p]=0;
}
if(rev[p]) {
rev[p*2]^=1;
rev[p*2+1]^=1;
rev[p]=0;
}
}
void modify(int p,int l,int r,int ql,int qr,int ist,int isr) {
if(ql > qr) return;
if(l>qr || r<ql) return;
if(l>=ql && r<=qr) {
if(ist) settag(p);
if(isr) setrev(p);
}
else {
pushdown(p);
modify(p*2,l,(l+r)/2,ql,qr,ist,isr);
modify(p*2+1,(l+r)/2+1,r,ql,qr,ist,isr);
}
}
void traverse(int p,int l,int r) {
if(l==r) {
if(tag[p] && !rev[p]) a[l]=1;
else a[l]=0;
}
else {
pushdown(p);
traverse(p*2,l,(l+r)/2);
traverse(p*2+1,(l+r)/2+1,r);
}
}
int main() {
n=65536*2;
char op,p,q;
while(~scanf("%c %c%d,%d%c\n",&op,&p,&t1,&t2,&q)) {
++t1, ++t2;
if(p=='(') t1=t1*2+1;
else t1=t1*2;
if(q==')') t2=t2*2-1;
else t2=t2*2;
if(t1>t2) continue;
if(op=='U') modify(1,1,n,t1,t2,1,0);
if(op=='I') modify(1,1,n,2,t1-1,1,1), modify(1,1,n,t2+1,n,1,1);
if(op=='D') modify(1,1,n,t1,t2,1,1);
if(op=='C') modify(1,1,n,2,n,0,1), modify(1,1,n,2,t1-1,1,1), modify(1,1,n,t2+1,n,1,1);
if(op=='S') modify(1,1,n,t1,t2,0,1);
}
traverse(1,1,n);
int last=0,flag=0;
for(int i=1;i<=n+1;i++) { // Error n->n+1
if(last==0 && a[i]==1) last=i;
if(last && a[i]==0) {
int l=last, r=i-1;
flag=1;
if(l&1) printf("(%d,",l/2-1);
else printf("[%d,",l/2-1);
if(r&1) printf("%d) ",(r-1)/2);
else printf("%d] ",(r-1)/2);
last=0;
}
}
if(flag==0) cout<<"empty set";
}
[SDOI2008] 校门外的区间 - 线段树的更多相关文章
- [bzoj3226][Sdoi2008]校门外的区间——线段树
题目 略 题解 直接套黄学长模板. Orz 代码 #include <bits/stdc++.h> using namespace std; #define ll long long #d ...
- bzoj 3226 [Sdoi2008]校门外的区间(线段树)
3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 615 Solved: 227[Submit][Stat ...
- BZOJ-3226 校门外的区间 线段数+拆点(类似的思想)
shabi题....bzoj关键字检查freopen??可怕,,1A的卡了一小时.... 3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec Memory Limit: ...
- 3226. [SDOI2008]校门外的区间【线段树】
Description 受校门外的树这道经典问题的启发,A君根据基本的离散数学的知识,抽象出5种运算维护集合S(S初始为空)并最终输出S.现在,请你完成这道校门外的树之难度增强版——校门外的区间. ...
- BZOJ3226[Sdoi2008]校门外的区间 题解
题目大意: 有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 : ...
- 「BZOJ3226」[Sdoi2008]校门外的区间
题目 首先是开闭区间的处理,我们把\(1.5\)这种数加进来,用\([1.5,6]\)来表示\((2,6]\) 根据离散数学的基本知识,尝试把五个操作转化成人话 把\([x,y]\)变成\(1\) 把 ...
- 3226: [Sdoi2008]校门外的区间
链接 思路 bug漫天飞... 维护一颗线段树,支持区间赋值,和区间异或.因为会处理到一些方括号还是圆括号的问题,所以对于每一个下标都乘2,假设中间有一个.5即可,都变成了方括号,输出在处理一下. U ...
- BZOJ3226: [Sdoi2008]校门外的区间
感觉很有趣的题呢. 每个点拆成两个,线段树维护. 不过这题难点其实在输入输出. #include<bits/stdc++.h> #define N (1<<17) #defin ...
- BZOJ 3226: [Sdoi2008]校门外的区间
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3226 题意:初始集合S为空.模拟四种集合操作:集合并.交.差.补集并. 思路:区间 ...
随机推荐
- Spring Boot自动配置如何工作
通过使用Mongo和MySQL DB实现的示例,深入了解Spring Boot的@Conditional注释世界. 在我以前的文章“为什么选择Spring Boot?”中,我们讨论了如何创建Sprin ...
- Android进程调度之adj算法
copy from : http://gityuan.com/2016/08/07/android-adj/ 一.概述 提到进程调度,可能大家首先想到的是Linux cpu调度算法,进程优先级之类概念 ...
- mysql基础(附具体操作代码)
# 注释内容 -- 注释内容 -- 创建数据库 king CREATE DATABASE king; -- 查看当前服务器下有哪些数据库 SHOW DATABASES; SHOW SCHEMAS; - ...
- Nginx虚拟主机配置(20200202)
一台机器上跑多个站点,即多个域名 curl -xIP:port 域名 用来指定访问的域名在哪个IP的哪个端口上 Nginx默认虚拟主机 不管什么域名解析到该服务器,都会访问到默认虚拟主机 ngi ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(10)
目录 /etc/fstab 文件的作用是什么? Linux 内核的图形化启动是怎么回事? Linux 系统中的文件名是否以大小写来进行区别? 「GRUB 中无法找到硬盘」怎么解决? 「GRUB 及配置 ...
- Go String
在 Go 语言中, 字符串是基础数据类型之一, 关键字为 string. 变量声明 字符串变量的声明如下: // 声明一个字符串类型的变量 s, 未赋予初始值时默认为零值"" va ...
- .Net Core通过json文件 配置管理后台导航菜单
先来看个最终效果图 以前我们配置后台菜单 一般都是把菜单链接, 图标, 以及层级关系 配置到数据库,Core很容易通过json文件来配置导航菜单 而不用存数据库了 先添加个menuconfig.js ...
- 如何将BroadcastReceiver中的信息传到Activity中
方法:在BroadcastReceiver中定义一个接口,在Activity中定义一个BroadcastReceiver的对象,采用动态注册,在Activity中定义接口中的方法并通过Broadcas ...
- 数据库->神奇的concat_ws函数
神奇的concat_ws函数 了解到concat_ws函数起因是因为:朋友给我发了一份面试题,其中有一句看似很简单的查询,但是我就是没做出来.如下图: 经查阅资料了解通过两个字段拼接并且用“_”进 ...
- P1055 ISBN号码(getline(cin,s); printf("%s",str); )
题目描述 每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 9 位数字.1 位识别码和 3 位分隔符,其规定格式如 x-xxx-xxxxx-x,其中符号 - 就是分隔符(键盘上的 ...