题意

输出最后的集合

 

题解

校门外的树会做吧

区间知道是什么东西吧

校门外的区间会做了吧

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

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. SDUST 作业10 Problem D 魔方阵

    Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2     魔方阵的规律如下: ...

  2. Zookeeper 脑裂

    转自 http://blog.csdn.net/u010185262/article/details/49910301 Zookeeper zookeeper是一个分布式应用程序的协调服务.它是一个为 ...

  3. Like ruby of SBM Crusher zip to dict

    how to use the zip to bulid a dict in python? data = """A dynamic, interpreted, open ...

  4. nginx安装 nginx: [emerg] getpwnam(“www”) failed 错误

    inux 64系统中安装nginx1.3时如果出现错误:nginx: [emerg] getpwnam(“www”) failed解决方法1:      在nginx.conf中 把user nobo ...

  5. 1)C++对象大小计算

          C++对象的大小不同的编译器的实现是不一样的,以下仅讨论.net2003,其他编译的可能出现的结果以下也做了分析和猜测.在反推不同编译器实现的C++对象的大小时.对齐是一个很重要也容易被遗 ...

  6. Dll学习二_Dll 窗体中动态创建数据并使用Demo

    沿用上一篇Demo 环境:DelphiXE,XP,SQL2005 贴出改动过的单元代码: dbGrid控件版: unit SubMain_Unit; interface uses Windows, M ...

  7. jQuery学习笔记(3)

    children():只考虑子元素而不考虑其他后代元素 <html xmlns="http://www.w3.org/1999/xhtml"> <head run ...

  8. mini2440裸机之MMU(二)(mmu.c) (转)

    分类: 嵌入式 http://blog.chinaunix.net/uid-26435987-id-3082166.html(转) /********************************* ...

  9. 使用 Attribute +反射 来对两个类之间动态赋值

    看同事使用的 一个ORM 框架 中 有这样一个功能  通过特性(附加属性)的功能来 实现的两个类对象之间动态赋值的 功能 觉得这个功能不错,但是同事使用的 ORM 并不是我使用的  Dapper  所 ...

  10. LaTex中让页码从正文开始编号

    在正文和目录之前这样设置即可 \setcounter{page}{}