我们定义谷是小的段,峰是大的段。
首先,白送了分,很显然谷的长度是,直接无脑对于每组询问即可。
然后,用简单的科技可以让这个变快,就能得到额外的分,这个太简单了,不写了。
接下来,我们考虑找找性质:
假设对于作为谷,其向右第一个合法的谷的位置是,那么右边的任意一个位置,都可以当做是合法的谷。
原因是,假设右边有一个位置,不能当谷,也就是,以及一些区间和相关的限制,那么从向右的最优决策肯定不是,我们可以放大题意,让可以走到去。
那么,我们定义向右第一个合法的位置是。
从到连长度为的边(相当于是作为波谷)。
从到连长度为的边,从到连长度为的边。
如果向右没有合法的,且可以当峰,那么从到连长度为的边。
询问的内容相当于是问从起点到终点的最长路。
接下来就需要稍微想想了,一个点,向右找第一个,满足的是什么?满足的是,换句话说,如果不满足条件,那么,说明,那么结论就出来了,一个点向右第一个满足条件的,最多是的距离。
那么这下问题就简单多了,比如用ddp
就可以加速这个问题,我们用矩阵来维护这个转移,然后直接ddp
。
但实际上这样复杂度就多了,我们可以直接用线段树来维护一个矩阵,表示从区间左边第点出发,跳到区间最右边最多能跳几次,以及跳到哪了(这里跳指的是从到),样合并两个区间复杂度是的。