GDOI模拟 蜘蛛侠

来源:互联网 发布:sql一次insert多行 编辑:程序博客网 时间:2024/04/29 20:10

题目大意

给你n座大楼的高度,你只能跳到相邻高楼上并且要保证跳到的楼的高度必须不能大于现在处在的楼的高度。除此之外,还会一些高楼上有弹簧,从这些高楼起跳,能跳到任何其他的高楼。给你一个起始高楼的位置,问最多能跳到多少幢高楼?(包括起始高楼)一座高楼可以经过多次,但只计算一次。
n<=300000) 时限500ms

我们可以知道从弹簧开始向左右两边扩展,一段连续的不下降序列是可以跳到并且是可以跳回弹簧的,我称这种区域叫”弹簧的覆盖区域“,易得所有的弹簧覆盖区域可以相互到达。
倘若起始位置在弹簧的覆盖区域,那么答案就是弹簧覆盖区域的大小非弹簧覆盖区域外加上最长的一段不上升或不下降序列的长度。
若起始位置不在弹簧的覆盖区域,答案就是最长的一段不上升或不下降序列的长度。

这只是其中一种解法,你还可以用Tarjan算法来做。

0 0
原创粉丝点击