poj3667 Hotel
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 18925 Accepted: 8242
Description

The cows are journeying north to Thunder Bay in Canada to gain cultural enrichment and enjoy a vacation on the sunny shores of Lake Superior. Bessie, ever the competent travel agent, has named the Bullmoose Hotel on famed Cumberland Street as their vacation residence. This immense hotel has N (1 ≤ N ≤ 50,000) rooms all located on the same side of an extremely long hallway (all the better to see the lake, of course).

The cows and other visitors arrive in groups of size Di (1 ≤ Di ≤ N) and approach the front desk to check in. Each group i requests a set of Di contiguous rooms from Canmuu, the moose staffing the counter. He assigns them some set of consecutive room numbers r..r+Di-1 if they are available or, if no contiguous set of rooms is available, politely suggests alternate lodging. Canmuu always chooses the value of r to be the smallest possible.

Visitors also depart the hotel from groups of contiguous rooms. Checkout i has the parameters Xi and Di which specify the vacating of rooms Xi ..Xi +Di-1 (1 ≤ Xi ≤ N-Di+1). Some (or all) of those rooms might be empty before the checkout.

Your job is to assist Canmuu by processing M (1 ≤ M < 50,000) checkin/checkout requests. The hotel is initially unoccupied.

Input

* Line 1: Two space-separated integers: N and M
* Lines 2..M+1: Line i+1 contains request expressed as one of two possible formats: (a) Two space separated integers representing a check-in request: 1 and Di (b) Three space-separated integers representing a check-out: 2, Xi, and Di

Output

* Lines 1.....: For each check-in request, output a single line with a single integer r, the first room in the contiguous sequence of rooms to be occupied. If the request cannot be satisfied, output 0.

Sample Input

10 6
1 3
1 3
1 3
1 3
2 5 5
1 6
Sample Output

1
4
7
0
5

思路:
线段树区间合并,算是模板题了把。。
乍一看好像很复杂,其实理清楚思路的话还是不算难的
这道题讲解起来太麻烦了,就不写思路了。给一篇我觉得讲解的很好的博客:https://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html

实现代码:

#include<iostream>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mid int m = (l + r) >> 1
const int M = 5e5+;
int cov[M<<],lsum[M<<],rsum[M<<],sum[M<<];
void pushdown(int m,int rt){
if(cov[rt]!=-){
cov[rt<<] = cov[rt<<|] = cov[rt];
sum[rt<<] = lsum[rt<<] = rsum[rt<<] = cov[rt]?:m-(m>>);
sum[rt<<|] = lsum[rt<<|] = rsum[rt<<|] = cov[rt]?:(m>>);
cov[rt] = -;
}
} void pushup(int m,int rt){
lsum[rt] = lsum[rt<<];
rsum[rt] = rsum[rt<<|];
if(lsum[rt] == m-(m>>)) lsum[rt] += lsum[rt<<|];
if(rsum[rt] == (m>>)) rsum[rt] += rsum[rt<<];
sum[rt] = max(lsum[rt<<|]+rsum[rt<<],max(sum[rt<<],sum[rt<<|]));
} void build(int l,int r,int rt){
sum[rt] = lsum[rt] = rsum[rt] = r - l + ;
cov[rt] = -;
if(l == r) return ;
int m = (l + r) >> ;
build(lson); build(rson);
} void update(int L,int R,int c,int l,int r,int rt){
if(L <= l&&R >= r){
sum[rt] = lsum[rt] = rsum[rt] = c?:r-l+;
cov[rt] = c;
return ;
}
pushdown(r - l + ,rt);
int m = (l + r) >> ;
if(L <= m) update(L,R,c,lson);
if(R > m) update(L,R,c,rson);
pushup(r - l + ,rt);
} int query(int w,int l,int r,int rt){
if(l == r) return l;
pushdown(r - l + ,rt);
int m = (l + r) >> ;
if(sum[rt<<] >= w) return query(w,lson);
else if(lsum[rt<<|] + rsum[rt<<] >= w) return m - rsum[rt<<] + ;
else return query(w,rson);
} int main()
{
int n,m,x,a,b,y;
cin>>n>>m;
build(,n,);
while(m--){
cin>>x;
if(x == ){
cin>>y;
if(sum[] < y) cout<<<<endl;
else {
int p = query(y,,n,);
cout<<p<<endl;
update(p,p+y-,,,n,);
}
}
else{
cin>>a>>b;
update(a,a+b-,,,n,);
}
}
}

poj3667 Hotel (线段树 区间合并)的更多相关文章

  1. POJ 3667 Hotel(线段树 区间合并)

    Hotel 转载自:http://www.cnblogs.com/scau20110726/archive/2013/05/07/3065418.html [题目链接]Hotel [题目类型]线段树 ...

  2. poj-3667(线段树区间合并)

    题目链接:传送门 参考文章:传送门 思路:线段树区间合并问题,每次查询到满足线段树的区间最左值,然后更新线段树. #include<iostream> #include<cstdio ...

  3. POJ 3667 Hotel (线段树区间合并)

    题目链接:http://poj.org/problem?id=3667 最初给你n间空房,m个操作: 操作1 a 表示检查是否有连续的a间空房,输出最左边的空房编号,并入住a间房间. 操作2 a b ...

  4. POJ 3667 & 1823 Hotel (线段树区间合并)

    两个题目都是用同一个模板,询问最长的连续未覆盖的区间 . lazy代表是否有人,msum代表区间内最大的连续长度,lsum是从左结点往右的连续长度,rsum是从右结点往左的连续长度. 区间合并很恶心啊 ...

  5. 线段树(区间合并) POJ 3667 Hotel

    题目传送门 /* 题意:输入 1 a:询问是不是有连续长度为a的空房间,有的话住进最左边 输入 2 a b:将[a,a+b-1]的房间清空 线段树(区间合并):lsum[]统计从左端点起最长连续空房间 ...

  6. Poj 3667——hotel——————【线段树区间合并】

    Hotel Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 13124   Accepted: 5664 Descriptio ...

  7. poj3667 线段树 区间合并

    //Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

  8. 【bzoj1593】[Usaco2008 Feb]Hotel 旅馆 线段树区间合并

    题目描述 奶牛们最近的旅游计划,是到苏必利尔湖畔,享受那里的湖光山色,以及明媚的阳光.作为整个旅游的策划者和负责人,贝茜选择在湖边的一家著名的旅馆住宿.这个巨大的旅馆一共有N (1 <= N & ...

  9. HDU 3911 线段树区间合并、异或取反操作

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=3911 线段树区间合并的题目,解释一下代码中声明数组的作用: m1是区间内连续1的最长长度,m0是区间内连续 ...

随机推荐

  1. C#构造方法--实例化类时初始化的方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  2. ISCSI工作流程target和initiator

    随着企业级的数据呈指数增长,传统的集中式存储方案已无法满足其存储要求,因而存储区域网(storage area network,SAN)技术被广泛应用,但其存在距离短.价格贵和构建复杂等不足.基于iS ...

  3. Google是如何教会机器玩Atari游戏的

    转自:http://blog.csdn.net/revolver/article/details/50177219 今年上半年(2015年2月),Google在Nature上发表了一篇论文:Human ...

  4. service手动实例化(new)导致类中的spring对象无法注入的问题解决

    下面说的这个画横线的可能是错误的,因为我之前用controller继承父类的注解对象的时候成功了,所以可能这次的唯一原因就是 不该把本该从ioc容器中拿出的对象通过new的方式实例化,至于继承注解对象 ...

  5. java过滤器Filter笔记

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静 ...

  6. WayOS计费对接(零点计费系统)详细教程

    零点计费系统开发也有两年了,一直都是自己和朋友在使用,今年开始有对外免费开发体验的想法,在此简单介绍一下wayos和零点计费的对接教程. 可到官网www.feidian8.com里面的首页点击查看零点 ...

  7. Windows下fabric sdk连接Linux上fabric网络的调试过程

    上个月刚入职一家公司从事区块链研发工作,选型采用Hyperledger Fabric作为开发平台.团队的小组成员全部采用的是在VirtualBox上面安装桌面版的Ubuntu 16.04虚拟机,开发工 ...

  8. 《Linux内核设计与实现》第五周读书笔记——第十一章

    <Linux内核设计与实现>第五周读书笔记——第十一章 20135301张忻 估算学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 实际学习时间:共3.0小时 读书: ...

  9. spring-boot随笔

    配置了spring-boot-starter-web的依赖后,会自动添加tomcat和spring mvc的依赖,那么spring boot 会对tomcat和spring mvc进行自动配置 < ...

  10. SDN可靠性相关

    A subtree-based approach to failure detection and protection for multicast in SDN FRONTIERS OF INFOR ...