题意

输出最后的集合

 

题解

校门外的树会做吧

区间知道是什么东西吧

校门外的区间会做了吧

昨天做个大线段树没做出来,今天做个小线段树压压惊

py一下输入数据,然后操作变成:

U 区间涂1
I 两侧区间涂0
D 区间涂0
C 两侧涂0,中间取反
S 区间取反

#include<map>
#include<stack>
#include<queue>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<complex>
#include<iostream>
#include<assert.h>
#include<algorithm>
using namespace std;
#define inf 1001001001
#define infll 1001001001001001001LL
#define ll long long
#define dbg(vari) cerr<<#vari<<" = "<<(vari)<<endl
#define gmax(a,b) (a)=max((a),(b))
#define gmin(a,b) (a)=min((a),(b))
#define Ri register int
#define gc getchar()
#define il inline
il int read(){
Ri x=0,f=0;char ch;
while(!isdigit(ch=gc))if(ch=='(')f=-1;
while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=gc;}
if(ch==')')f=1;
return x*2-f;
}
#define gi read()
#define FO(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
#define N 131073
char ch[5];
struct seg{int l,r,val,tag,rev;}t[4*N];
void build(int k,int l,int r){
t[k]=(seg){l,r,0,-1,0};
if(l==r) return;
int mid=(l+r)>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
}
void pushdown(int k){
int tag=t[k].tag,rev=t[k].rev;
t[k].tag=-1;t[k].rev=0;
if(t[k].l==t[k].r){
if(tag!=-1)t[k].val=tag;
t[k].val^=rev;;
return;
}
if(tag!=-1){
t[k<<1].tag=t[k<<1|1].tag=tag;
t[k<<1].rev=t[k<<1|1].rev=0;
}
t[k<<1].rev^=rev;t[k<<1|1].rev^=rev;
}
int query(int k,int x){
pushdown(k);
int l=t[k].l,r=t[k].r;
if(l==r) return t[k].val;
int mid=(l+r)>>1;
if(x<=mid)
return query(k<<1,x);
else
return query(k<<1|1,x);
}
void modify(int k,int x,int y,int val){
if(y<x)return;
pushdown(k);
int l=t[k].l,r=t[k].r;
if(l==x&&y==r){
if(val==-1) t[k].rev^=1;
else t[k].tag=val;
return;
}
int mid=(l+r)>>1;
if(y<=mid)
modify(k<<1,x,y,val);
else if(x>mid)
modify(k<<1|1,x,y,val);
else {
modify(k<<1,x,mid,val);
modify(k<<1|1,mid+1,y,val);
}
}
int main(){
build(1,1,N);
while(scanf("%s",ch)!=EOF){
int a=gi,b=gi;
a+=2;b+=2;
switch(ch[0]){
case 'U':modify(1,a,b,1);break;
case 'I':modify(1,1,a-1,0);modify(1,b+1,N,0);break;
case 'D':modify(1,a,b,0);break;
case 'C':modify(1,1,a-1,0);modify(1,b+1,N,0);modify(1,a,b,-1);break;
case 'S':modify(1,a,b,-1);break;
}
}
int start=-1,last=-1,flag=0;
for(int i=1;i<=N;i++)
if(query(1,i)){
if(start==-1)start=i;
last=i;
}
else{
if(start!=-1){
if(flag)printf(" ");else flag=1;
if(start&1) printf("(");
else printf("[");
printf("%d,%d",start/2-1,(last+1)/2-1);
if(last&1)printf(")");
else printf("]");
}
last=start=-1;
}
if(!flag)puts("empty set");
return 0;
}

[bzoj 3226]校门外的区间的更多相关文章

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

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

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

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

  3. BZOJ-3226 校门外的区间 线段数+拆点(类似的思想)

    shabi题....bzoj关键字检查freopen??可怕,,1A的卡了一小时.... 3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec Memory Limit: ...

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

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

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

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

  6. 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 : ...

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

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

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

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

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

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

随机推荐

  1. 删除linux系统服务

    #删除服务的命令,[ServiceName]需要替换为实际的服务名称 sudo update-rc.d [ServiceName] remove 有时候安装sysv-rc-conf进行服务控制,但是在 ...

  2. LevelDB系列之Log文件

    上节内容讲到log文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据.因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中的数据 ...

  3. MySQL下查看用户和建立用户

    启动数据库: [root@server ~]# mysqld_safe & [1] 3289 [root@server ~]# 130913 08:19:58 mysqld_safe Logg ...

  4. delphi android 中 Toast 的实现(老外写的UNIT)

    unit Android.JNI.Toast; // Java bridge class imported by hand by Brian Long (http://blong.com)interf ...

  5. Python之MySql操作

    1.安装驱动 输入命令:pip install MySQL-python 2.直接使用驱动 #coding=utf-8 import MySQLdb conn= MySQLdb.connect( ho ...

  6. C# 平时碰见的问题【1】

    1. SqlBulkCopy 可以利用这个类实现快速大批量新增数据的效果, 但在使用过程中发现了一个问题: 无法将数据源中的DateTime类型转换成数据库中的int类型 看起来就是数据列不对应导致的 ...

  7. C# 处理csv格式的Excel文件代码

    public class CSVFileHelper { /// <summary> /// 将DataTable中数据写入到CSV文件中 /// </summary> /// ...

  8. JavaWeb之Servlet:请求 与 响应

    1 引入 浏览器和服务器的种类都有很多,要在它们之间通讯,必定要遵循一定的准则,而http协议就是这样的一个"准则". Http协议:规定了 浏览器 和 服务器 数据传输的一种格式 ...

  9. Maven系列--pom.xml 配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  10. Android WIFI 启动流程

    参考:http://blog.chinaunix.net/uid-26215986-id-3260413.html 一. WIFI 工作步骤 1. Wifi模块初始化 2. Wifi启动 3. 查找热 ...