Skip to content
0

P11325 【MX-S7-T3】「SMOI-R2」Monotonic Queue 笔记

SM 的大神都太强了。

首先,区间肯定相交,因为答案只和队尾弹出有关,并且先动队尾再动队头,所以如果区间不交,把后面的区间的 l 前移,答案一定不劣。

一个 ci 能够被算进答案,当且仅当存在 [lj,rj] 满足 ljinxtiri,其中 nxti 是后面第一个 >ai 的数。

li=li+1,则 [li+1,ri+1] 完全可被 [li,ri+1] 代替。

结合上面三点,考虑在每个 li=i 计算 ci 会被算进答案的可能。

fi,j 表示考虑到前 i 个数,并且 ri=j 的方案数。

则有 fi,j=maxk=ijfi1,k+ci×[jnxti]

考虑线段树优化,对 i 这维做扫描线,维护前缀 max(显然 ij 的状态是无效状态)。

每次即相当于对 [nxti,n] 这一段加上 ci

如果 ci 是负的话,可能会弄出一段不满足前缀 max 的,找到线段树中开始下降前一个的数(注意不要找到无效状态),对这一段不满足前缀 max 性质的直接覆盖。

我们可以在任意一个地方立正,此时你肯定不能把 j 伸到很远的地方,只能伸到 i+1

所以答案是扫描线每一个时刻,对线段树的 i+1max

还要对原地立正的答案(0)取 max

时间复杂度 O(nlogn),空间复杂度 O(n)

最近更新