洛谷 P4344 [SHOI2015]脑洞治疗仪
题意简述
维护序列,支持以下操作:
- 0 l r:将l~r赋为0
- 1 l1 r1 l2 r2:将l1r1中的1替换l2r2中的0,多余舍弃
- 2 l r:询问l~r中最大连续1的长度
题解思路
珂朵莉树暴力赋值,查询
代码
#include <set>
#include <iostream>
#include <algorithm>
#define IT set<Node>::iterator
typedef long long ll;
using std::set;
int n,m,op,l0,r0,l1,r1,x,y;
struct Node {
int l,r;
mutable int v;
Node(int L,int R,ll V):l(L),r(R),v(V) {}
bool operator<(const Node& x) const { return l<x.l; }
};
set<Node> s;
inline void print() {
for (IT it=s.begin();it!=s.end();++it) {
std::cout<<it->l<<' '<<it->r<<' '<<it->v<<'\n';
}
}
inline IT split(const int& pos) {
IT it=s.lower_bound(Node(pos,0,0));
if (it!=s.end()&&it->l==pos) return it;
--it; int L=it->l,R=it->r; ll V=it->v; s.erase(it);
s.insert(Node(L,pos-1,V));
return s.insert(Node(pos,R,V)).first;
}
inline void assign(const int& l,const int& r,const int& va) {
IT itr=split(r+1),itl=split(l); s.erase(itl,itr); s.insert(Node(l,r,va));
}
inline void modify(const int& l0,const int& r0,const int& l1,const int& r1) {
IT itr=split(r0+1),itl=split(l0); int sum=0;
for (IT it=itl;it!=itr;++it) if (it->v) sum+=it->r-it->l+1;
s.erase(itl,itr); s.insert(Node(l0,r0,0));
if (!sum) return;
itr=split(r1+1),itl=split(l1);
for (IT it=itl;it!=itr;++it) if (!it->v) {
if (sum>=it->r-it->l+1) sum-=it->r-it->l+1,it->v=1;
else assign(it->l,it->l+sum-1,1),sum=0;
}
}
inline int query(const int& l,const int& r,int res=0,int xx=0) {
for (IT itr=split(r+1),itl=split(l);itl!=itr;++itl)
if (itl->v) res=std::max(res,xx),xx=0;
else xx+=itl->r-itl->l+1;
return res=std::max(res,xx);
}
int main() {
std::ios::sync_with_stdio(0); std::cin.tie(0); std::cout.tie(0);
std::cin>>n>>m; s.insert(Node(1,n,1));
for (register int i=1;i<=m;++i) {
std::cin>>op>>l0>>r0;
if (op==0) assign(l0,r0,0);
else if (op==1) std::cin>>l1>>r1,modify(l0,r0,l1,r1);
else if (op==2) std::cout<<query(l0,r0)<<'\n';
}
}
洛谷 P4344 [SHOI2015]脑洞治疗仪的更多相关文章
- 洛谷P4344 [SHOI2015]脑洞治疗仪(珂朵莉树)
传送门 看到区间推倒……推平就想到珂朵莉树 挖脑洞直接assign,填坑先数一遍再assign再暴力填,数数的话暴力数 //minamoto #include<iostream> #inc ...
- 洛谷P4344 [SHOI2015]脑洞治疗仪(ODT)
题意 题目链接 Sol ODT板子题. 操作1直接拆区间就行. #include<bits/stdc++.h> #define fi first #define se second con ...
- bzoj 4592(洛谷 4344) [Shoi2015]脑洞治疗仪——线段树上二分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4592 1操作就是用线段树来二分找到第一个有 k 个0的位置. 在洛谷上A了,与暴力和网上题解 ...
- 【题解】Luogu P4344 [SHOI2015]脑洞治疗仪
原题传送门:P4344 [SHOI2015]脑洞治疗仪 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树好题啊 我一开始一直Re65 后来重构代码就ac了,或许是rp问题 ...
- 【BZOJ4592】[Shoi2015]脑洞治疗仪 线段树
[BZOJ4592][Shoi2015]脑洞治疗仪 Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置. ...
- 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块
!!!一道巨恶心的数据结构题,做完当场爆炸:) 首先,如果你用位运算的时候不小心<<打成>>了,你就可以像我一样陷入疯狂的死循环改半个小时 然后,如果你改出来之后忘记把陷入死循 ...
- loj 2038 / 洛谷 P4345 [SHOI2015] 超能粒子炮・改 题解
好玩的推式子 题目描述 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒子炮・改相比超能粒子炮,在威力上 ...
- [SHOI2015]脑洞治疗仪(恶心的线段树,区间最大子段和)
题目描述: 曾经发明了自动刷题机的发明家 SHTSC 又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置. 为了简单起见,我们将大脑视作一个 01 序列.11代表这个位 ...
- 题解 P4344 【[SHOI2015]脑洞治疗仪】
前言 这道题目呢,看上去很难,实际上我们可以用线段树解决这道题目. 正文 我们维护 sum.len.tag.lmax.rmax.ans. sum 就是这段区间非脑洞的个数 len 就是这段区间的长度 ...
随机推荐
- Bzoj 2839 集合计数 题解
2839: 集合计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 495 Solved: 271[Submit][Status][Discuss] ...
- Bzoj 1040 [ZJOI2008]骑士 题解
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5368 Solved: 2044[Submit][Status ...
- Java编程思想:构建复杂模型
import sun.nio.cs.Surrogate; import java.util.ArrayList; import java.util.Random; public class Test ...
- python爬虫常用正则表达式组合匹配
["\']匹配什么?(.*?)匹配什么? ["\'] ----------- 匹配单双引号 (.*?)xxx ----------- 匹配任意长度字符+xxx ...
- (转)Vix_API 操作 VMware
对虚拟机(VMware Workstation)进行程序控制,查询了VMware官方网站的一些内容,但调试的时候还是出现很多问题. 刚开始想通过命令行的方式控制虚拟机,但总是存在一些问题,到现在也没搞 ...
- Excel催化剂开源第44波-窗体在Show模式下受Excel操作影响变为最小化解决方式
在Excel催化剂的许多功能中,都会开发窗体用于给用户更友好的交互使用,但有一个问题,困扰许久,在窗体上运行某些代码后,中途弹出下MessageBox对话框给用户做一些简单的提示或交互时,发现程序运行 ...
- 个人永久性免费-Excel催化剂功能第32波-空行空列批量插入和删除
批量操作永远是效率提升的王道,也是Excel用户们最喜欢能够实现的操作虽说有些批量操作不一定合适Excel的最佳实践操作,但万千世界,无奇不有,特别是在国人眼中领导最大的等级森严的职场环境下.Exce ...
- 我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3cp8ng15g94wc
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3cp8ng15g94wc
- Kafka API操作
Kafka API实战 环境准备 在eclipse中创建一个java工程 在工程的根目录创建一个lib文件夹 解压kafka安装包,将安装包libs目录下的jar包拷贝到工程的lib目录下,并buil ...
- python找质数对
python找质数对 编写python脚本,输入一个正整数,输出有几对质数的和等于这个正整数. 例如输入一个正整数10,可以找出有“3+7=10”.“5+5=10”两个质数对的和为10. 要实现这个功 ...