POJ 3667--Hotel(线段树,区间合并)

Hotel

Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 12065 Accepted: 5237

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 ≤ XiN-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

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

——————————————————————分割线——————————————————

题目大意:

给定一段长为n的区间,初始的时候为空,然后有两种操作

1:查询是否存在长度为x的连续区间,若存在,则返回最左边的端点,否则输出0

2:将区间(l,l+x-1)清空

思路:

线段树的区间合并问题:

要查询连续区间长度,所以要记录最长的连续区间,一段区间的连续可以分为左连续,右连续,中间连续,然后记录就可以了

父节点左连续区间为左儿子左连续,如果左儿子在整个左区间内连续则再加上右儿子左连续

父节点右连续区间为右儿子右连续,如果右儿子在整个右区间内连续则再加上左儿子右连续

父节点中间连续区间为左儿子右连续加上右儿子左连续

然后记录每个节点总的最长连续区间的值

每次向上更新或者向下延迟都要重新计算节点信息

#include #include #include #include #define lson l,m,rt>1)); mc[rt>1); cover[rt]=-1; } } void push_up(int rt,int m) { lc[rt]=lc[rt>1))) lc[rt]+=lc[rt>1)) rc[rt]+=rc[rt>1; build(lson); build(rson); } void update(int L,int R,int c,int l,int r,int rt) { if(L>1; if(L>1; if(mc[rt=x) return query(x,lson); else if(rc[rt=x) return m-rc[rt

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
上一篇:HDU 5001 Walk 求从任意点出发任意走不经过某个点的概率 概率dp 2014 ACM/ICPC Asia Regional Anshan Online
下一篇:HDU 4998 Rotate(鞍山网络赛B题)
相关文章

poj1066巧妙的线段相交的应用

poj 1823 Hotel 线段树,注意懒惰标

poj 1410 矩形与线段相交判断

hdu 4339 Query 线段树 多校联合赛

poj 3667 Hotel 线段树 内存分配问题

线段树和单调队列优化DP---POJ2373解题

poj 3162 线段树 hdu 4123 bfs

[线段树]POJ 2374 Fence Obstacle

POJ 1823 Hotel 线段树 + lazy标签

HDU OJ 1754 I Hate It [线段树

图文推荐

POJ 3667--Hotel(线段树,区间合并)
ZOJ 3640 Help Me
POJ 3667--Hotel(线段树,区间合并)
CF 518C(Anya and
POJ 3667--Hotel(线段树,区间合并)
hdu 1016 Prime R
UVA - 11987 - A

分类:默认分类 时间:2015-03-11 人气:2
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.184 (s). 10 q(s)