传送门:洛谷 P2894 酒店 Hotel
算法分析:询问满足条件的连续最长区间,不能像模板一样\(pushup\)时直接相加,而是要对区间进行合并。\(sum\)表示区间最大空房数,\(lsum(rsum)\)表示从左(右)开始的最大空房数
对于每个请求,如果 \(op=1\) ,先检查总区间最大连续空房数是否满足要求,然后查询。查询完毕后为空房区间打上标记
如果 \(op=2\) ,除去 \([x,x+y)\) 的标记即可
\(pushup\ \&\ pushdown\) 的处理:
\(pushup\) : \(lsum[k]\) 表示的区间 \(A\) 和 \(lsum[ls]\) 表示的区间 \(B\) 一定满足\(B\subseteq A\) ,故 \(lsum[k]\) 先赋为 \(lsum[ls]\) ,\(rsum\) 亦然。之后判断能否同样包含另一区间即可
\(pushdown\) :同 \(pushup\) ,只需判断是否退房即可


#include<iostream>
#include<cstdio>
#define maxN 50000
#define mid ((l+r)>>1)
#define ls k<<1
#define rs k<<1 | 1
#define in(x) x=read()
#define g(x,val) sum[x]=lsum[x]=rsum[x]=val
#define lson ls,l,mid
#define rson rs,mid+1,r
using namespace std;
typedef int rd;
int lsum[4*maxN+1],rsum[4*maxN+1];
int v[4*maxN+1],sum[4*maxN+1],n,m;
inline rd read();
void task(),pushup(int,int,int);
void build(int,int,int);
int query(int,int,int,int);
void update(int,int,int,int,int,int);
void pushdown(int,int,int);
int main()
{in(n); in(m); build(1,1,n);for(int i=1;i<=m;i++) task();return 0;
}
void update(int k,int l,int r,int ql,int qr,int u)
{if(ql<=l && r<=qr){if(!u) g(k,r-l+1); else g(k,0);v[k]=u; return;}if(v[k]!=-1) pushdown(k,l,r);if(ql<=mid) update(lson,ql,qr,u);if(qr>mid) update(rson,ql,qr,u);pushup(k,l,r);
}
void build(int k,int l,int r)
{g(k,r-l+1); v[k]=-1;if(l==r) return;build(lson); build(rson);
}
void pushup(int k,int l,int r)
{lsum[k]=lsum[ls];rsum[k]=rsum[rs];if(lsum[k]==r-l+1-((r-l+1)>>1)) lsum[k]+=lsum[rs];if(rsum[k]==((r-l+1)>>1)) rsum[k]+=rsum[ls];sum[k]=max(sum[ls],max(sum[rs],lsum[rs]+rsum[ls]));
}
void pushdown(int k,int l,int r)
{v[ls]=v[rs]=v[k];if(!v[k]){g(ls,r-l+1-((r-l+1)>>1));g(rs,(r-l+1)>>1);}else g(ls,0),g(rs,0);v[k]=-1;
}
int query(int k,int l,int r,int pos)
{if(l==r) return l;if(v[k]!=-1) pushdown(k,l,r);if(sum[ls]>=pos) return query(lson,pos);else if(rsum[ls]+lsum[rs]>=pos) return mid-rsum[ls]+1;return query(rson,pos);
}
void task()
{int op,x; in(op); in(x);if(op==1)if(sum[1]<x) printf("0\n");else{int ans=query(1,1,n,x);printf("%d\n",ans);update(1,1,n,ans,ans+x-1,1);}else update(1,1,n,x,x+read()-1,0);
}
inline rd read()
{rd num=0,f=1;char ch=getchar();while((ch<'0' || ch>'9') && ch!='-') ch=getchar();if(ch=='-') {ch=getchar(); f=-1;}while(ch>='0' && ch<='9'){num=num*10+ch-'0';ch=getchar();}return num*f;
}

转载于:https://www.cnblogs.com/ezsyshx/p/10358892.html

洛谷 P2894 酒店 Hotel相关推荐

  1. 洛谷 P1402 酒店之王

    题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...

  2. [洛谷P1402] 酒店之王

    洛谷连接:酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有 ...

  3. 洛谷P1402 酒店之王(二分图)

    P1402 酒店之王 题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只 ...

  4. 洛谷P1402 酒店之王

    传送门:>Here< 题意:有N个人去酒店,酒店共有P个房间,Q道菜.已知每个人喜欢特定的几个房间和几道菜,一个人是满意的当且仅当住了喜欢的房间,吃了喜欢的菜(一个人只能选一个房间一道菜) ...

  5. 洛谷P1402 酒店之王--网络流最大流拆点

    题目描述 XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有固定的q道不同的菜. ...

  6. 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel

    题面:P2894 [USACO08FEB]酒店Hotel 题解:和基础的线段树操作差别不是很大,就是在传统的线段树基础上多维护一段区间最长的合法前驱(h_),最长合法后驱(t_),一段中最长的合法区间 ...

  7. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  8. 洛谷 P1142 轰炸

    洛谷 P1142 轰炸 题目描述 "我该怎么办?"飞行员klux向你求助. 事实上,klux面对的是一个很简单的问题,但是他实在太菜了. klux要想轰炸某个区域内的一些地方,它们 ...

  9. 洛谷 P1387 最大正方形

    P1387 最大正方形 题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=10 ...

  10. 洛谷P2763 试题库问题

    题目:https://www.luogu.org/problemnew/show/P2763 题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性. ...

最新文章

  1. 急速rust服务器管理_Rust 与服务端编程的碎碎念
  2. python教学在线观看-python在线学习
  3. 瑞士桁架机器人_机器人库晚报:人工智能可以在实验室中预测人的血糖水平
  4. Python-多进程
  5. javaone_JavaOne 2012:在JVM上诊断应用程序
  6. python 修改array_python 基础_ 数组的 增删改查3
  7. oracle导入中文数据出现乱码
  8. ZXing生成二维码
  9. (二)线程--通过委托异步调用方法
  10. oracle 12 if,Oracle 12.1 RAC 系列 – 配置第二个网络和相应的SCAN2
  11. Flink学习笔记:搭建Flink on Yarn环境并运行Flink应用
  12. Linux网络服务_dhcp服务和dhcp中继服务
  13. Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)
  14. 高德地图车机版缩放版_高德地图车机版2020
  15. 企业微信的聊天记录保存在了哪里?
  16. golang 微信商户平台支付平台V3
  17. Opencv学习笔记 高动态范围 (HDR) 成像
  18. ios 随时检测蓝牙是否开启_如何在iPhone或iPad上检查蓝牙状态
  19. python提取数组元素_使用python提取数组元素的一部分
  20. PV016R1K1T1NMMC派克变量柱塞泵

热门文章

  1. 案例:回归分析-R实现
  2. 你所知的最有价值(最有效)的思维方法是什么?
  3. fatal error LNK1169: 找到一个或多个多重定义的符号 解决方案
  4. 「版本升级」MyEclipse CI 2018.12.0正式发布
  5. 无法解析具体reference那个同名文件
  6. d3_3 ATM模拟系统
  7. Django模板-模板标签
  8. CKEditor设置背景图片及宽高
  9. OpenGL学习脚印:深度測试(depth testing)
  10. 用存储过程DataFactory准备测试数据