题目传送门

题意:四种集合的操作,对应区间的01,问最后存在集合存在的区间。

分析:U T [l, r]填充1; I T [0, l), (r, N]填充0; D T [l, r]填充0; C T[0, l), (r, N]填充0并且[l, r]xor; S T [l, r]xor

线段树结点两个属性,cover[o]: 该区间是否填充(1, 0, -1),_xor[o]: 该区间是否异或反转(1, 0)。最后(和[的区别可以原数*2判奇偶得

#include <cstdio>
#include <cstring>
#include <algorithm> #define lson l, mid, o << 1
#define rson mid + 1, r, o << 1 | 1
typedef long long ll;
const int N = 2 * 65535 + 5;
bool vis[N];
int cover[N<<2], _xor[N<<2]; void Xor(int o) {
if (cover[o] != -1) {
cover[o] ^= 1;
} else {
_xor[o] ^= 1;
}
}
void push_down(int o) {
if (cover[o] != -1) {
cover[o<<1] = cover[o<<1|1] = cover[o];
_xor[o<<1] = _xor[o<<1|1] = 0;
cover[o] = -1;
}
if (_xor[o]) {
Xor (o<<1);
Xor (o<<1|1);
_xor[o] = 0;
}
}
void updata(int ql, int qr, char op, int l, int r, int o) {
if (ql <= l && r <= qr) {
if (op == 'U') {
cover[o] = 1;
_xor[o] = 0;
} else if (op == 'D') {
cover[o] = _xor[o] = 0;
} else if (op == 'C' || op == 'S') {
Xor (o);
}
return ;
}
push_down (o);
int mid = l + r >> 1;
if (ql <= mid) {
updata (ql, qr, op, lson);
} else if (op == 'I' || op == 'C') {
cover[o<<1] = _xor[o<<1] = 0;
}
if (qr > mid) {
updata (ql, qr, op, rson);
} else if (op == 'I' || op == 'C') {
cover[o<<1|1] = _xor[o<<1|1] = 0;
}
}
void query(int l, int r, int o) {
if (cover[o] == 1) {
for (int i=l; i<=r; ++i) {
vis[i] = true;
}
return ;
} else if (cover[o] == 0) {
return ;
}
if (l == r) {
return ;
}
push_down (o);
int mid = l + r >> 1;
query (lson);
query (rson);
} int main() {
char op, l, r; int a, b;
int n = N - 5;
cover[1] = cover[1] = 0;
while (~scanf ("%c %c%d,%d%c\n", &op, &l, &a, &b, &r)) {
a <<= 1; b <<= 1;
if (l == '(') {
a++;
}
if (r == ')') {
b--;
}
if (a > b) {
if (op == 'C' || op == 'I') {
cover[1] = _xor[1] = 0;
}
} else {
updata (a, b, op, 0, n, 1);
}
}
memset (vis, false, sizeof (vis));
query (0, n, 1);
bool flag = false;
int s = -1, e = 0;
for (int i=0; i<=n; ++i) {
if (vis[i]) {
if (s == -1) {
s = i;
}
e = i;
} else {
if (s != -1) {
if (flag) putchar (' ');
flag = true;
printf ("%c%d,%d%c", s&1 ? '(' : '[', s>>1, (e+1)>>1, e&1 ? ')' : ']');
s = -1;
}
}
}
if (flag) {
puts ("");
} else {
puts ("empty set");
} return 0;
}

  

线段树(区间操作) POJ 3325 Help with Intervals的更多相关文章

  1. POJ 2528 ——Mayor's posters(线段树+区间操作)

    Time limit 1000 ms Memory limit 65536 kB Description The citizens of Bytetown, AB, could not stand t ...

  2. 线段树(区间合并) POJ 3667 Hotel

    题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...

  3. Bzoj 1798: [Ahoi2009]Seq 维护序列seq(线段树区间操作)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小可 ...

  4. POJ 3225 Help with Intervals --线段树区间操作

    题意:给你一些区间操作,让你输出最后得出的区间. 解法:区间操作的经典题,借鉴了网上的倍增算法,每次将区间乘以2,然后根据区间开闭情况做微调,这样可以有效处理开闭区间问题. 线段树维护两个值: cov ...

  5. HDU - 6315(2018 Multi-University Training Contest 2) Naive Operations (线段树区间操作)

    http://acm.hdu.edu.cn/showproblem.php?pid=6315 题意 a数组初始全为0,b数组为1-n的一个排列.q次操作,一种操作add给a[l...r]加1,另一种操 ...

  6. HDU 4578——Transformation——————【线段树区间操作、确定操作顺序】

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  7. 吉首大学校赛 K 白山茶与红玫瑰 (线段树区间操作)

    链接:https://ac.nowcoder.com/acm/contest/925/K来源:牛客网 题目描述 公元2019年6月22日,白山茶王国与红玫瑰王国展开大战,在世外仙境——天空花园处,双方 ...

  8. COJ 1010 WZJ的数据结构(十) 线段树区间操作

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1001 WZJ的数据结构(十) 难度级别:D: 运行时间限制:3000ms: ...

  9. poj3225 线段树区间操作 (见鬼)

    细节处理实在太重要了. #include<cstdio> #include<cstring> #define MT 65533*4 #define Maxn MT*4 int ...

随机推荐

  1. endnote设置文献第二行悬挂缩进办法

    参考:http://blog.sina.com.cn/s/blog_62b13cf201014lfr.html  使用[endnote]插入文献后,如果文献稍长些,有第二行,第二行会顶格开始.并且这个 ...

  2. 数据结构One_Vector(向量的简单实现)

    #include <iostream> using namespace std; template<typename Object> class Vector { privat ...

  3. 【转】VS项目属性的一些配置项的总结

    首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系,假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目, ...

  4. GPS NEMA 0183协议

    转自:http://www.cnblogs.com/xidongs/archive/2011/02/01/1948689.html 一. NMEA0183标准语句(GPS常用语句)$GPGGA例:$G ...

  5. ASP.NET Web API 中的异常处理(转载)

    转载地址:ASP.NET Web API 中的异常处理

  6. 垂直时间轴HTML

    1.概述 用时间点来展示事件发生点来代替用table展示一条条数据,能够给人清晰.一目了然能够看清事情发生的过程,UI页面也显示的那么清晰.如何用css+html做出时间轴展示事件点的?先来看看下面的 ...

  7. HDU5115 Dire Wolf(区间DP)

    渐渐认识到区域赛更侧重的是思维及基本算法的灵活运用,而不是算法的量(仅个人见解),接下来要更多侧重思维训练了. 区间DP,dp[i][j]表示从i到j最终剩余第i 与第j只的最小伤害值,设置0与n+1 ...

  8. <转>SQL语句执行顺序说明

    原文地址:http://www.cnblogs.com/summer_adai/archive/2011/10/28/2227605.html SQL 不同于与其他编程语言的最明显特征是处理代码的顺序 ...

  9. php array_intersect() 和 array_diff() 函数

    在PHP中,使用 array_intersect 求两个数组的交集比使用 array_diff 求同样两个数组的并集要快. 如果要求数组 $a 与数组 $b 的差集的个数,应该使用 count($a) ...

  10. QQ的账号登录及api操作

    .qq.php <?php /** * PHP Library for qq.com * * @author */ class qqPHP { function __construct($app ...