博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ2667 Hotel(线段树区间合并)
阅读量:6269 次
发布时间:2019-06-22

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

这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并

题意:1 a:询问是不是有连续长度为a的空房间,有的话住进最左边
2 a b:将[a,a+b-1]的房间清空
思路:记录区间中最长的空房间
线段树操作:update:区间替换 query:询问满足条件的最左断点

 

#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define M 50005#define ls node<<1,l,m#define rs node<<1|1,m+1,rint n,m,ltree[M<<2],rtree[M<<2],mtree[M<<2],cover[M<<2];void pushdown(int node,int m){ if(cover[node]!=-1) { cover[node<<1]=cover[node<<1|1]=cover[node]; mtree[node<<1]=ltree[node<<1]=rtree[node<<1]=cover[node]?0:m-(m>>1); mtree[node<<1|1]=ltree[node<<1|1]=rtree[node<<1|1]=cover[node]?0:(m>>1); cover[node]=-1; }}void pushup(int node,int m){ ltree[node]=ltree[node<<1]; rtree[node]=rtree[node<<1|1]; if(ltree[node]==m-(m>>1)) ltree[node]+=ltree[node<<1|1]; if(rtree[node]==(m>>1)) rtree[node]+=rtree[node<<1]; mtree[node]=max(ltree[node<<1|1]+rtree[node<<1],max(mtree[node<<1],mtree[node<<1|1]));}void buildtree(int node,int l,int r){ mtree[node]=ltree[node]=rtree[node]=r-l+1; cover[node]=-1; if(l==r) return ; int m=(l+r)>>1; buildtree(ls); buildtree(rs);}void update(int L,int R,int c,int node,int l,int r){ if(L<=l&&r<=R) { mtree[node]=ltree[node]=rtree[node]=c?0:r-l+1; cover[node]=c; return ; } pushdown(node,r-l+1); int m=(l+r)>>1; if(L<=m) update(L,R,c,ls); if(m
>1; if(mtree[node<<1]>=w) return query(ls,w); else if(rtree[node<<1]+ltree[node<<1|1]>=w) return (m-rtree[node<<1]+1); return query(rs,w);}int main(){ //freopen("in.txt","r",stdin); scanf("%d%d",&n,&m); buildtree(1,1,n); while(m--) { int op,a,b; scanf("%d",&op); if(op==1) { scanf("%d",&a); if(mtree[1]

 

转载于:https://www.cnblogs.com/d-e-v-i-l/p/4750003.html

你可能感兴趣的文章
数字逻辑的一些基本运算和概念
查看>>
ant重新编译打包hadoop-core-1.2.1.jar时遇到的错
查看>>
【★★★★★】提高PHP代码质量的36个技巧
查看>>
3 weekend110的配置hadoop(格式化) + 一些问题解决 + 未免密码配置
查看>>
JavaScript Creating 对象
查看>>
Java compiler level does not match the version of the installed Java project facet.(转)
查看>>
WPF MediaElement.Position属性
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
spring mysql多数据源配置
查看>>
[React] Override webpack config for create-react-app without ejection
查看>>
检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。...
查看>>
测试java的父子类化
查看>>
HDOJ 1008
查看>>
安装thrift出现的一些问题
查看>>
makefile编写---单个子目录编译模板
查看>>
Oracle DB_LINK如何使用
查看>>
cv resource
查看>>
关于加快INSERT语句执行速度和HINT /*+ append */及/*+ append nologging */的使用
查看>>
JDK源代码学习系列07----Stack
查看>>
firefox
查看>>