QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2025-12-14 06:49:08

Last updated: 2025-12-14 06:49:13

Back to Problem

题解

假设 $2$ 操作做过 $k$ 次,那么这时做 $1$ 操作只需要令 $a_i$ 和 $v-ki$ 取较小值,$3$ 操作就是 $a_i$ 的值加上 $ki$。

假设初始时全是 $+\infty$,那么每次就是加一条直线,所有数不能高于这条直线。因为 $k$ 是递增的,所以每次加的直线会影响的是一段后缀,我们可以用栈来维护所有的直线,然后用线段树区间赋值成等差数列来回答询问。

现在 $a_i$ 有初始值,那么每个 $a_i$ 在某个时刻之前都是不变的,在之后就和初始是 $+\infty$ 没有区别了。在线做的画,我们需要找到每次操作第一次影响了哪些数,也就是需要查询剩下的数中 $a_i +ki$ 的最大值,这需要动态凸包。而其实我们可以离线整体二分,并且这个整体二分利用一些单调性可以做到 $O((n+q)\log (n+q))$。

总时间复杂度 $O((n+q)\log (n+q))$。

Comments

No comments yet.