【题解】P17286 「IXOI R2」Horizon Blue

猫树分治,\(i\le mid <j\) 的贡献是 \(\max(suf_i,pre_j)\)

考虑查询,就是对于所有 \(L\le l\le mid<r\le R\),求和 \(\max(suf_l,pre_r)\)
类似线段树,如果分治区间被 \([L,R]\) 完全包含了,可以直接返回一个预先计算好的值,所以只有 \(O(\log n)\) 个节点被访问。

考虑如何计算答案,每个 \(suf_l\) 取到 max 的 \(r\) 应该是一段前缀,并且是递增的,设这个位置是 \(A_l\),则贡献为 \(suf_l\times (\min(A_l,R)-mid)\),那么维护后缀和 \(\sum suf_l,\sum suf_l\times A_l\),支持二分 \(A_l\)

修改因为有单调性应该比较好做,这个是从 \(x\) 开始的一段区间赋值,然后 \(A\) 也可以进行二分得出。

所以整个复杂度就是 \(O(n\log n+q\log ^2 n)\) 的。

posted @ 2026-08-22 19:25  TallBanana  阅读(4)  评论(0)    收藏  举报