[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为空.模拟四种集合操作:集合并.交.差.补集并. 思路:区间 ...
随机推荐
- C#中实现文件拖放打开的方法
C#中实现文件拖放打开的方法 设置Form属性 AllowDrop = True; 在Form事件中 private void Form1_DragDrop(object sender, DragEv ...
- C# 四则运算及省市选择及日月选择
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- iOS 中事件的响应链和传递链
iOS事件链有两条:事件的响应链:Hit-Testing事件的传递链 响应链:由离用户最近的view向系统传递.initial view –> super view –> ….. –> ...
- Ubuntu18.04安装mysql并配置远程访问
1.ssh连接到Ubuntu服务器 默认root用户登陆,如果运行以下命令没有权限请在命令开头加sudo 2.安装mysql apt install mysql-server 3.配置mysql my ...
- vue-socket.io跨域问题的解决方法
报错信息: Access to XMLHttpRequest at 'http://192.168.37.130:5050/socket.io/?EIO=3&transport=polling ...
- VUE路径问题
import: html文件中,通过script标签引入js文件. 而vue中,通过import xxx from xxx路径的方式导入文件,不光可以导入js文件. "xxx"指的 ...
- Docker Stack 学习笔记
该文为<深入浅出Docker>的学习笔记,感谢查看,如有错误,欢迎指正 一.简介 Docker Stack 是为了解决大规模场景下的多服务部署和管理,提供了期望状态,滚动升级,简单易用,扩 ...
- nginx基础(二)
二.nginx基础配置 (1)错误指向一个页面 http状态指向指定访问页面,在 /etc/nginx/conf.d/default.conf 中配置 error_page /50x.html; er ...
- Qt的QString,QByteArray,char *相互转换
1.QString转换为QByteArray QString str = "; QByteArray byte = str.toUtf8(); // 转换为Utf8格式 byte.toLoc ...
- python——面向对象,继承
"""继承:子类继承父类1.单继承,多继承2. 子类调用或重用父类的同名属性和方法3. 多层4.私有属性和私有方法class 类名(object<父类>)&q ...