传送门

看到区间推倒……推平就想到珂朵莉树

挖脑洞直接assign,填坑先数一遍再assign再暴力填,数数的话暴力数

 //minamoto
#include<iostream>
#include<cstdio>
#include<set>
#define IT set<node>::iterator
using std::set;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
template<class T>inline bool cmax(T&a,const T&b){return a<b?a=b,:;}
int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
char sr[<<],z[];int C=-,Z;
inline void Ot(){fwrite(sr,,C+,stdout),C=-;}
void print(int x){
if(C><<)Ot();if(x<)sr[++C]=,x=-x;
while(z[++Z]=x%+,x/=);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=2e5+;
struct node{
int l,r;mutable bool v;
node(int L,int R=-,bool V=):l(L),r(R),v(V){}
inline bool operator <(const node &b)const
{return l<b.l;}
};set<node> s;
IT split(int pos){
IT it=s.lower_bound(node(pos));
if(it!=s.end()&&it->l==pos) return it;
--it;int l=it->l,r=it->r;bool v=it->v;
s.erase(it),s.insert(node(l,pos-,v));
return s.insert(node(pos,r,v)).first;
}
void assign(int l,int r){
IT itr=split(r+),itl=split(l);
s.erase(itl,itr),s.insert(node(l,r,));
}
int count(int l,int r){
IT itr=split(r+),itl=split(l);int res=;
for(IT it=itl;it!=itr;++it) res+=it->v?it->r-it->l+:;
s.erase(itl,itr),s.insert(node(l,r,));
return res;
}
void fi(int l,int r,int cnt){
IT itr=split(r+),itl=split(l);
for(;itl!=itr;++itl)
if(itl->v==){
if(cnt<=itl->r-itl->l+){
if(cnt==itl->r-itl->l+) itl->v=;
else{
int ql=itl->l,qr=itl->r;
s.erase(itl),s.insert(node(ql,ql+cnt-,)),s.insert(node(ql+cnt,qr,));
}
return;
}else itl->v=,cnt-=itl->r-itl->l+;
}
}
void recov(int l,int r,int ql,int qr){
int res=count(l,r);
if(res) fi(ql,qr,res);
}
int sum(int l,int r){
IT itr=split(r+),itl=split(l);int res=,tmp=;
for(;itl!=itr;++itl)
itl->v==?(tmp+=itl->r-itl->l+):(cmax(res,tmp),tmp=);
return std::max(res,tmp);
}
int main(){
// freopen("testdata.in","r",stdin);
int n=read(),m=read();
s.insert(node(,n,));
while(m--){
int op=read(),l=read(),r=read(),ql,qr;
switch(op){
case :assign(l,r);break;
case :ql=read(),qr=read(),recov(l,r,ql,qr);break;
case :print(sum(l,r));break;
}
}
return Ot(),;
}

洛谷P4344 [SHOI2015]脑洞治疗仪(珂朵莉树)的更多相关文章

  1. 洛谷 P4344 [SHOI2015]脑洞治疗仪

    题意简述 维护序列,支持以下操作: 0 l r:将l~r赋为0 1 l1 r1 l2 r2:将l1~r1中的1替换l2~r2中的0,多余舍弃 2 l r:询问l~r中最大连续1的长度 题解思路 珂朵莉 ...

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

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

  3. [洛谷P3987]我永远喜欢珂朵莉~

    [洛谷P3987]我永远喜欢珂朵莉~ 题目大意: 给你\(n(n\le10^5)\)个数\(A_{1\sim n}(A_i\le5\times10^5)\),\(m(m\le5\times10^5)\ ...

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

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

  5. 洛谷P3987 我永远喜欢珂朵莉~(set 树状数组)

    题意 题目链接 Sol 不会卡常,自愧不如.下面的代码只有66分.我实在懒得手写平衡树了.. 思路比较直观:拿个set维护每个数出现的位置,再写个线段树维护区间和 #include<bits/s ...

  6. [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解

    参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...

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

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

  8. 洛谷AT2342 Train Service Planning(思维,动态规划,珂朵莉树)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 建立数学模型 这种很抽象的东西没有式子描述一下显然是下不了手的. 因为任何位置都以\(k\)为周期,所以我们只用关心一个周期,也就是以下数都在膜\(k\ ...

  9. 洛谷P2787 语文1(chin1)- 理理思维(珂朵莉树)

    传送门 一看到区间推倒……推平操作就想到珂朵莉树 区间推平直接assign,查询暴力,排序的话开一个桶统计,然后一个字母一个字母加就好了 开桶统计的时候忘了保存原来的左指针然后挂了233 //mina ...

随机推荐

  1. 某考试 T2 yja

    2.1 Description 在平面上找 n 个点, 要求这 n 个点离原点的距离分别为 r1, r2, ..., rn. 最大化这 n 个点构成的凸包面积, 凸包上的点的顺序任意. 2.2 Inp ...

  2. 开头第一篇Hello World

    以前在折腾个人博客的时候,使用过的WordpPress.Z-Blog.Typecho建站程序,开头第一篇都是Hello World,作为程序员的社区,开头第一篇当然也要是Hello World! 一句 ...

  3. Java日志框架-Logback手册中文版以及官方配置文档教程

    Logback手册中文版:(链接: https://pan.baidu.com/s/1bpMyasR 密码: 6u5c),虽然版本有点旧,但是大体意思差不多,先用中文版了解个大概,然后一切最新的配置以 ...

  4. 页面跳转到顶部---bug修改

    今天遇到一个很诡异的bug 某元素的html结构是: <div id="aa"> <span>诡异的bug</span> </div> ...

  5. dtrace-debug

    https://www.objc.io/issues/19-debugging/dtrace/

  6. WebLogic"域"的概念

    WebLogic Server中的域是逻辑上相关的一组 WebLogic Server 资源,可以作为一个单元进行管理.一个域中包含一台或多台 WebLogic Server,也可以包含 WebLog ...

  7. javascript闭包诡异的问题

    var funcs = []; for (var i = 0; i < 3; i++) { // let's create 3 functions funcs[i] = function() { ...

  8. Data obtained from ping: is it round trip or one way?

    I have 2 servers, each in two separate locations. I need to host an application on one, and the data ...

  9. Intel为Google的物联网平台Brillo推出开发板Edison

    Brillo* is a solution from Google* for building connected devices. Incorporating aspects of the Andr ...

  10. 跟面试官讲Binder(零)

    面试的时候,面试官问你说,简单说一下Android的Binder机制,你会怎么回答? 我想,我会这么说. 在Android启动的时候,Zygote进程孵化出第一个子进程叫SystemServer,而在 ...