HDU 2795 Billboard(宣传栏贴公告,线段树应用)
ACM
题目地址:HDU 2795 Billboard
题意:
要在h*w宣传栏上贴公告,每条公告的高度都是为1的,而且每条公告都要尽量贴最上面最靠左边的,给你一系列的公告的长度,问它们能不能贴上。
分析:
不是很好想,不过想到了就很好写了。
只要把宣传栏倒过来就好办了,这时候就是变成有h条位置可以填公告,填放公告时就可以尽量找最左边的合适的位置来放了。
可以用线段树实现,查找的复杂度是O(logn),需要注意的坑点是h的范围非常大,如果真的那么大线段树是开不下去的,但是n的范围才20w,而即使所有公告都要占一栏也不会超过n,所以线段树开min(h, n)就行了。
代码:
/*
* Author: illuz
* Blog: http://blog.csdn.net/hcbbt
* File: 2795.cpp
* Create Date: 2014-08-05 16:12:47
* Descripton: segment tree
*/
#include
#include
#include
#include
#include