闲扯
之前看书的时候,不是很懂,但是之前又看了下这道题的题解,看到一句又单调性突然懂了。。
题面
Solution
我们有一个很简单的想法,用一个优先队列来维护最长的蚯蚓,然后用一个变量 $delta$ 来维护增加的长度。
但是这样的复杂度是 $O(n\log n)$ 的,可以通过前 $17\sim 18$ 个测试点。
当然考试的时候能想到这里已经不错了,可以先去做其他的题,毕竟要想到正解可能还是有一定的难度,也只能多拿 $10$ 分。
那么我们怎么去掉这个 $\log$ 呢?
这个数据范围显然是需要 $O(n)$ 来完成的,这暗示了我们它可能具有单调性。
事实上的确如此。
我们可以发现这样一个结论:假设 $u$ 比 $v$ 先被切掉,那么一定有 $delta+\lfloor pu\rfloor\geq delta+\lfloor pv\rfloor,delta+u-\lfloor pu\rfloor\geq delta+v-\lfloor pv\rfloor$ 。
因为它们都只有被切的时候耽误了一次,少加了一个 $q$ ,所以对他们来说 $delta$ 是一样的。
所以我们就可以维护三个队列,分别存 $u,\lfloor pu\rfloor,u-\lfloor pu\rfloor$ 。
这用我们就可以 $O(n)$ 完成这道题了。
1 |
|