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


题意:有n个房间排成一排,有m个操作,对于操作1,询问是否有长度为v的连续的空房间,如果有,输出最小的左边的房间的编号,然后旅客将住进这些房间。对于操作2,将x开始,长度为D的房间清空。

思路:线段树。用3个数组sum,lsum,rsum分别记录当前区间的最长连续空房间的长度、从区间最左边开始最长连续空房间的长度、从区间右边开始最长连续空房间的长度。每次更新时,sum要么等于左右儿子的sum的最大值,要么等于左儿子的rsum的值加上右儿子的lsum的值,lsum和rsum更新方法类似。查询时,如果v>sum[1],则说明没有大于等于v的连续空房子,直接输出0。否则,从左到右查询是否有大于等于v的值。







你可能感兴趣的:(POJ 3667-hotel(线段树区间合并))