题目

题解

直接套黄学长模板。

Orz

代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 1000000000
#define n (65536 * 2 + 1)
char ch[5];
int read() {
int x = 0, f = 0;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '(')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
if (ch == ')')
f = 1;
return x * 2 - f;
}
struct seg {
int l, r, val, tag, rev;
} t[4 * n]; void build(int k, int l, int r) {
t[k].l = l;
t[k].r = r;
t[k].tag = -1;
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 && r == y) {
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);
}
}
void rever(int k, int x, int y) { modify(k, x, y, -1); }
int main() {
build(1, 1, n);
while (scanf("%s", ch) != EOF) {
int a = read(), b = read();
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);
rever(1, a, b);
break;
case 'S':
rever(1, a, b);
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", start / 2 - 1);
printf(",");
printf("%d", (last + 1) / 2 - 1);
if (last & 1)
printf(")");
else
printf("]");
}
last = start = -1;
}
}
if (!flag)
printf("empty set");
return 0;
}

[bzoj3226][Sdoi2008]校门外的区间——线段树的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. What to do when Enterprise Manager is not able to connect to the database instance (ORA-28001)

    摘自:http://dbtricks.com/?p=34 If you are trying to connect to the Oracle enterprise Manger and you ge ...

  2. 使用JDK自带的keytool工具生成证书

    一.keytool 简介 keytool 是java用于管理密钥和证书的工具,它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及 ...

  3. python中socket、socketio、flask-socketio、WebSocket的区别与联系

    socket.socketio.flask-socketio.WebSocket的区别与联系 socket 是通信的基础,并不是一个协议,Socket是应用层与TCP/IP协议族通信的中间软件抽象层, ...

  4. Mysql性能优化四:分库,分区,分表,你们如何做?

    分库分区分表概念 分区 就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的 分表 就是把一张数据量很大的表按一定的规则分解成N个具有独立存储空间的实体表.系统读写时 ...

  5. OpenStack配置虚拟机vcpu绑定步骤 转至元数据结尾

    . Changed in compute node: 给宿主机预留资源: 宿主机可用cpu:cpuid – cpuid 宿主机可用内存:25G #vim /etc/nova/nova.conf vcp ...

  6. [CH5302]金字塔

    题面 虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下.经过多年的研究,科学家对这座金字塔的内部结构已经有所了解.首先,金字塔由若干房间组成,房间之间连有通道.如果把房间看作节点, ...

  7. 问题 D: 约数的个数

    问题 D: 约数的个数 时间限制: 1 Sec  内存限制: 32 MB提交: 272  解决: 90[提交][状态][讨论版][命题人:外部导入] 题目描述 输入n个整数,依次输出每个数的约数的个数 ...

  8. 解决EasyUI DataGrid删除行失败的方法

    笔者最近在做一个项目的后台,用到了EasyUI的datagrid控件,并开启了行内编辑功能,实际上也就是使用了edatagird这个空间,引用了edatagrid.js,一切似乎都做的顺风顺水,添加数 ...

  9. DFS(1)——hdu1518Square

    一.题目回顾 题目链接:Square 题意:给你M根木棒,请判断这些木棒能否组成正方形. 二.解题思路 DFS+剪枝 [变量说明] sum:木棒的总长度 ave:形成的正方形的边长 maxlen:最长 ...

  10. [比赛总结]ACM div3 G 比赛总结

    这次题目总体感觉和做阅读理解差不多,英文题目读起来相当费劲. 另外,这次比赛整个队伍中我们三个都突出存在的问题就是,把简单问题复杂化,抓不到事物的本质,因此很容易的就被题目误导. 比如C题,明明想到了 ...