题解:P14523 【MX-S11-T4】Ice Drop

· · 题解

考虑如何计算 f(b) 如何计算:

考虑维护序列 t_i 表示 f(a_{i,\cdots,r})。

先求出 nxt_i 表示最大的 r 满足 a_{i,\cdots,r} 合法,然后相当于在 nxt_i+1 处做单点置 0,在 i 处单点置 1。描述其它的操作,令 p 表示上一个满足 a_p\ne 1 的位置。

然后求区间历史和。a_i=1 乘上的要撤销。

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