题意简述

维护序列,支持以下操作:

  • 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]脑洞治疗仪的更多相关文章

  1. 洛谷P4344 [SHOI2015]脑洞治疗仪(珂朵莉树)

    传送门 看到区间推倒……推平就想到珂朵莉树 挖脑洞直接assign,填坑先数一遍再assign再暴力填,数数的话暴力数 //minamoto #include<iostream> #inc ...

  2. 洛谷P4344 [SHOI2015]脑洞治疗仪(ODT)

    题意 题目链接 Sol ODT板子题. 操作1直接拆区间就行. #include<bits/stdc++.h> #define fi first #define se second con ...

  3. bzoj 4592(洛谷 4344) [Shoi2015]脑洞治疗仪——线段树上二分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4592 1操作就是用线段树来二分找到第一个有 k 个0的位置. 在洛谷上A了,与暴力和网上题解 ...

  4. 【题解】Luogu P4344 [SHOI2015]脑洞治疗仪

    原题传送门:P4344 [SHOI2015]脑洞治疗仪 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 珂朵莉树好题啊 我一开始一直Re65 后来重构代码就ac了,或许是rp问题 ...

  5. 【BZOJ4592】[Shoi2015]脑洞治疗仪 线段树

    [BZOJ4592][Shoi2015]脑洞治疗仪 Description 曾经发明了自动刷题机的发明家SHTSC又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置. ...

  6. 洛谷P4344 脑洞治疗仪 [SHOI2015] 线段树+二分答案/分块

    !!!一道巨恶心的数据结构题,做完当场爆炸:) 首先,如果你用位运算的时候不小心<<打成>>了,你就可以像我一样陷入疯狂的死循环改半个小时 然后,如果你改出来之后忘记把陷入死循 ...

  7. loj 2038 / 洛谷 P4345 [SHOI2015] 超能粒子炮・改 题解

    好玩的推式子 题目描述 曾经发明了脑洞治疗仪与超能粒子炮的发明家 SHTSC 又公开了他的新发明:超能粒子炮・改--一种可以发射威力更加强大的粒子流的神秘装置. 超能粒子炮・改相比超能粒子炮,在威力上 ...

  8. [SHOI2015]脑洞治疗仪(恶心的线段树,区间最大子段和)

    题目描述: 曾经发明了自动刷题机的发明家 SHTSC 又公开了他的新发明:脑洞治疗仪--一种可以治疗他因为发明而日益增大的脑洞的神秘装置. 为了简单起见,我们将大脑视作一个 01 序列.11代表这个位 ...

  9. 题解 P4344 【[SHOI2015]脑洞治疗仪】

    前言 这道题目呢,看上去很难,实际上我们可以用线段树解决这道题目. 正文 我们维护 sum.len.tag.lmax.rmax.ans. sum 就是这段区间非脑洞的个数 len 就是这段区间的长度 ...

随机推荐

  1. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  2. C语言学习书籍推荐《C语言入门经典(第5版)》下载

    霍尔顿 (Ivor Horton) (作者), 杨浩 (译者) 下载地址:点我 C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad ...

  3. MyBatis 一对多映射

    From<MyBatis从入门到精通> <!-- 6.1.2.1 collection集合的嵌套结果映射 和association类似,集合的嵌套结果映射就是指通过一次SQL查询将所 ...

  4. GO学习笔记 - 命令行解析

    本文主题:基于os.Args与flag实现Golang命令行解析. 小慢哥的原创文章,欢迎转载 目录 ▪ 一. os.Args ▪ 二. flag ▪ 三. 结合os.Args与flag实现子命令 ▪ ...

  5. Git对象

    上一节了解了 Git 的一个重要的概念:暂存区. 暂存区是一个介于工作区和版本库的中间状态,当执行commit时,实际上是将暂存区的内容提交大版本库中,而执行add则是将本次变更添加到暂存区. 上一节 ...

  6. Android 异常 UncaughtException detected: java.lang.RuntimeException: Parcelable encountered IOExcepti

    异常信息: UncaughtException detected: java.lang.RuntimeException: Parcelable encountered IOException wri ...

  7. Mysql优化(出自官方文档) - 第三篇

    目录 Mysql优化(出自官方文档) - 第三篇 1 Multi-Range Read Optimization(MRR) 2 Block Nested-Loop(BNL) and Batched K ...

  8. Redis项目实战---应用及理论(上)---redis基础知识介绍

    redis(Remote Dictionary Server)   一.原理及特性层面:     1.优势:        1)数据加载在内存中,执行速度快, 数据结构类似于HashMap,HashM ...

  9. web-inf与meta-inf

    /WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则. /WEB-INF/classes/包含了站点所有用的 class 文件,包括 ser ...

  10. http.client.ResponseNotReady: Request-sent

    最近学习python写接口测试,使用的是connection.request 发现在测试一个发送报告接口时候,同一个接口,同样的脚本,只是一个参数传不同值,总提示:http.client.Respon ...