洛谷 P2894 [USACO08FEB]酒店
用线段树维护三个值:区间最长空位长度,从左端点可以延伸的最长空位长度,从右端点可以延伸的最长空位长度。
#include<complex>
#include<cstdio>
using namespace std;
const int N=2e6+;
int n,m;
int len[N],Max[N],maxl[N],maxr[N],lazy[N];
int qread()
{
int x=;
char ch=getchar();
while(ch<'' || ch>'')ch=getchar();
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x;
}
void PushUp(int rt)
{
if(Max[rt<<]==len[rt<<])maxl[rt]=Max[rt<<]+maxl[rt<<|];
else maxl[rt]=maxl[rt<<];
if(Max[rt<<|]==len[rt<<|])maxr[rt]=Max[rt<<|]+maxr[rt<<];
else maxr[rt]=maxr[rt<<|];
Max[rt]=max(max(Max[rt<<],Max[rt<<|]),maxr[rt<<]+maxl[rt<<|]);
}
void PushDown(int rt)
{
if(!lazy[rt])return;
lazy[rt<<]=lazy[rt<<|]=lazy[rt];
if(lazy[rt]==)
{
Max[rt<<]=maxl[rt<<]=maxr[rt<<]=;
Max[rt<<|]=maxl[rt<<|]=maxr[rt<<|]=;
}
else
{
Max[rt<<]=maxl[rt<<]=maxr[rt<<]=len[rt<<];
Max[rt<<|]=maxl[rt<<|]=maxr[rt<<|]=len[rt<<|];
}
lazy[rt]=;
}
void Build(int l,int r,int rt)
{
maxl[rt]=maxr[rt]=Max[rt]=len[rt]=r-l+;
if(l==r)return;
int mid=l+r>>;
Build(l,mid,rt<<);Build(mid+,r,rt<<|);
}
void Modify(int l,int r,int rt,int nowl,int nowr,int v)
{
if(nowl<=l && r<=nowr)
{
if(v==)Max[rt]=maxl[rt]=maxr[rt]=;
else Max[rt]=maxl[rt]=maxr[rt]=len[rt];
lazy[rt]=v;
return;
}
PushDown(rt);
int mid=l+r>>;
if(nowl<=mid)Modify(l,mid,rt<<,nowl,nowr,v);
if(mid<nowr)Modify(mid+,r,rt<<|,nowl,nowr,v);
PushUp(rt);
}
int Query(int l,int r,int rt,int p)
{
if(l==r)return l;
PushDown(rt);
int mid=l+r>>;
if(Max[rt<<]>=p)return Query(l,mid,rt<<,p);
if(maxr[rt<<]+maxl[rt<<|]>=p)return mid-maxr[rt<<]+;
return Query(mid+,r,rt<<|,p);
}
int main()
{
scanf("%d%d",&n,&m);
Build(,n,);
int p,l,r,x;
while(m--)
{
p=qread();
if(p==)
{
x=qread();
if(Max[]<x){puts("");continue;}
int tot=Query(,n,,x);
printf("%d\n",tot);
Modify(,n,,tot,tot+x-,);
}
else
{
l=qread();r=qread();
Modify(,n,,l,l+r-,);
}
}
return ;
}
洛谷 P2894 [USACO08FEB]酒店的更多相关文章
- 洛谷P2894 [USACO08FEB]酒店Hotel
P2894 [USACO08FEB]酒店Hotel https://www.luogu.org/problem/show?pid=2894 题目描述 The cows are journeying n ...
- 洛谷 P2894 [USACO08FEB]酒店Hotel-线段树区间合并(判断找位置,不需要维护端点)+分治
P2894 [USACO08FEB]酒店Hotel 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultur ...
- 洛谷 P2894 [USACO08FEB]酒店Hotel 解题报告
P2894 [USACO08FEB]酒店Hotel 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultur ...
- 洛谷P2894 [USACO08FEB]酒店Hotel [线段树]
题目传送门 酒店 题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and ...
- 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel
https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...
- 洛谷P2894[USACO08FEB]酒店Hotel(线段树)
问题描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...
- 洛谷 P2894 [USACO08FEB]酒店Hotel
题目描述 The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a ...
- 洛谷P2894 [USACO08FEB]酒店Hotel_区间更新_区间查询
Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...
- 线段树【洛谷P2894】 [USACO08FEB]酒店Hotel
P2894 [USACO08FEB]酒店Hotel 参考样例,第一行输入n,m ,n代表有n个房间,编号为1---n,开始都为空房,m表示以下有m行操作,以下 每行先输入一个数 i ,表示一种操作: ...
随机推荐
- docker相关--开始使用swarm模式
Swarm简介 Swarm是Docker的一个编排工具,参考官网:https://docs.docker.com/engine/swarm/ Swarm 模式简介 要在Swarm模式下运行docker ...
- [高清] 深入浅出Spring Boot 2.x.pdf + 代码
------ 郑重声明 --------- 资源来自网络,纯粹共享交流, 如果喜欢,请您务必支持正版!! --------------------------------------------- 下 ...
- JavaScript中数组的key-value在对象中倒装的妙用
对于数组的去重.寻找指定元素的索引,通常我们都是通过遍历来解决,但是在某些应用场景下,将数组的value-key进行倒装,也即将value当做对象的key,key当做对象value,可以极大降低算法的 ...
- oracle数据库 TIMESTAMP(6)时间戳类型
时间戳类型,参数6指的是表示秒的数字的小数点右边可以存储6位数字,最多9位.由于时间戳的精确度很高,我们也常常用来作为版本控制. 插入时,如下方式:insert into test4 values(t ...
- jupyter安装出现问题:安装后无法打开
jupyter安装出现问题:安装后无法打开 traitlets.traitlets.TraitError: Could not decode 'C:\Users\\xce\xa2\xcc\xf0\xd ...
- 使用HBuilderX打包成app之后点击返回按钮让它返回上一个页面
首先:下载引入mui.min.js文件,MUI框架mui-min.js文件github地址 https://github.com/dcloudio/mui 下载之后并在index.html文件中引入如 ...
- Selenium文件上传
转自:https://www.cnblogs.com/miaojjblog/p/9679915.html Web上本地上传图片,弹出的框Selenium是无法识别的,也就是说,selenium本身没有 ...
- ERROR: Cannot uninstall 'chardet'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
pip 安装 docker库报错: ERROR: Cannot uninstall 'chardet'. It is a distutils installed project and thus we ...
- 用python执行 js代码__来自脚本之家
"" github地址 :https://github.com/emmetio/pyv8-binaries "" 安装依赖 首先安装依赖:Boost, 这一步网 ...
- Flume 初探
Apache 是一个高可用.高可靠的,分布式的海量日志采集.聚合.传输系统,基于流式架构,灵活简单. Flume 最主要的作用就是实时读取服务器本地磁盘的数据,将数据写入HDFS中. Flume组成架 ...