博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2572 [SCOI2010]序列操作
阅读量:6756 次
发布时间:2019-06-26

本文共 2211 字,大约阅读时间需要 7 分钟。

暴力数据结构牛逼!!!

这道题给你好多的01串,还有好多的区间统一赋值。

没错,你想到了什么?

珂朵莉树!

所以你就可以用珂朵莉树很轻松地水过这道题了!

唯一要注意的是split的顺序。必须先split右边的,再split左边的。

原因是先split左边的时候,可能会因为split右边而导致原迭代器被删掉了,所以左边的迭代器会是一个非法的,会RE。

然后就根本没有问题了。

代码:

#include
#include
#include
const int maxn = 100005;int n, m;struct Nodes{ int l, r; mutable int v; Nodes(int l, int r = -1, int v = 0): l(l), r(r), v(v){} bool operator < (const Nodes &rhs) const { return l < rhs.l; }};std::set
chotholly;#define IT std::set
::iteratorIT split(int pos){ IT it = chotholly.lower_bound(Nodes(pos)); if(it != chotholly.end() && it->l == pos) return it; --it; int l = it->l, r = it->r; int v = it->v; chotholly.erase(it); chotholly.insert(Nodes(l, pos - 1, v)); return chotholly.insert(Nodes(pos, r, v)).first;}void assign(int l, int r, int x){ IT itr = split(r + 1), itl = split(l); chotholly.erase(itl, itr); chotholly.insert(Nodes(l, r, x));}void revers(int l, int r){ IT itr = split(r + 1), itl = split(l); for(; itl != itr; ++itl) itl->v ^= 1;}int sum(int l, int r){ int ans = 0; IT itr = split(r + 1), itl = split(l); for(; itl != itr; ++itl) { if(itl->v) ans += (itl->r - itl->l + 1); } return ans;}int coun(int l, int r){ int ans = 0, res = 0; IT itr = split(r + 1), itl = split(l); for(; itl != itr; ++itl) { if(itl->v) { res += (itl->r - itl->l + 1); } else { ans = std::max(ans, res); res = 0; } } ans = std::max(ans, res); return ans;}int main(){ scanf("%d%d", &n, &m); for(int i = 0; i < n; i++) { int val; scanf("%d", &val); chotholly.insert(Nodes(i, i, val)); } //chotholly.insert(Nodes(n, n, 0)); while(m--) { int op, l, r; scanf("%d%d%d", &op, &l, &r); if(op == 0) assign(l, r, false); else if(op == 1) assign(l, r, true); else if(op == 2) revers(l, r); else if(op == 3) printf("%d\n", sum(l, r)); else if(op == 4) printf("%d\n", coun(l, r)); } return 0;}

转载于:https://www.cnblogs.com/Garen-Wang/p/9858916.html

你可能感兴趣的文章
DeltaGrad领跑智能化交易领域 预见收益颠覆基金行业
查看>>
nginx keepalived tomcat实现的高可用
查看>>
Https能避免流量劫持吗?
查看>>
oracle教程之oracle 删除表空间
查看>>
我的友情链接
查看>>
python 2.7.10 找不到 libmysqlclient.18.dylib 解决方案
查看>>
Exchange server 2010 安装部署之二,Exchange2010安装详解
查看>>
负载均衡集群之LVS
查看>>
本地计算机无法启动Server服务
查看>>
优秀前端工程师需要做的10件事
查看>>
我的友情链接
查看>>
Android学习笔记-基于HTTP的通信技术
查看>>
我的友情链接
查看>>
Sed实例二
查看>>
我的友情链接
查看>>
第三方备份虚拟机发生错误 附批量修改vmx参数脚本
查看>>
参观森华易腾机房有感
查看>>
笔记本光驱的常见故障解析
查看>>
使用poi读取word文档
查看>>
(转)ROR框架介绍
查看>>