检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
#题面
#题目描述
森林中有 棵树在一条直线上,每棵树有不同的高度。小鸟从第一课树开始跳跃到最后一棵树。如果跳到比当前树矮的,小鸟不会消耗任何体力,但如果跳到的树的高度大于等于当前树的高度,则需要消耗一个体力。
小鸟准备多次不同的尝试,规定了每次的最长跳跃幅度,请求出每次的最少耗费体力值。
#输入格式
第一行一个整数 ,表示树的数量。
第二行 个整数,第 个数为 ,表示第 棵树的高度。
第三行一个整数 ,表示本轮小鸟的步幅限制。
接下来 行,每行一个整数 ,表示小鸟的最少耗费的体力值。
#输出格式
对于每次尝试,输出一行一个整数,表示小鸟的最少耗费体力值。
#输入输出样例
样例输入 #1
9
4 6 3 6 3 7 2 6 5
2
2
5
样例输出 #1
2
1
#数据范围与约定
对于 的数据,,,,。
#思路
设 表示从起点飞行到 的体力值,易得以下转移方程:
时间复杂度为 ,无法通过本题。
考虑优化。可以发现对于每个 都会去遍历一遍 ,因此可以用单调队列来优化。使用单调队列维护到达前面 棵树的劳累值最小值(如劳累值相同则取高度最高的放在前面)。
容易证明这种做法是正确的。时间复杂度为 ,可以通过本题。
#代码
1 |
|