洛谷 P3437

矩阵查最大值,矩阵取 \(\max\)

区间修改的线段树套线段树。众所周知,树套树的外层结构是无法 pushdown 的(难道下传一棵线段树),同样也是不可以 pushup 的(难道合并两棵线段树),那如何处理这种区间操作的问题?答案是标记永久化,同时要递归到一个区间时快速算出修改一个子区间后的信息(最大值)。

我们先看看一维的情况。我们维护区间最大值 \(mx\),以及下传的标记 \(lzy\)

那么区间对 \(v\)\(\max\) 操作就是对和 \([ql, qr]\) 有交区间执行 mx = max(mx, v),同时对包含于 \([ql, qr]\) 的区间执行 lzy = max(lzy, v)

而求区间最大值操作相当于对于和 \([ql, qr]\) 有交的区间执行 ans = max(ans, lzy)(因为最后会下传到一个包含于 \([ql, qr]\) 的区间),包含于 \([ql, qr]\) 的区间执行 ans = max(ans, mx) 即可。


在考虑二维的情况,其实就是对外层结构的 \(mx, lzy\) 两个变量改成两棵动态开点线段树,然后转化为一维问题即可。

时间复杂度:\(O(n \log^2 V)\)

因为树套树有些功能是没有的(pushdown, pushup),所以要首先想到一个只用树套树操作的一维解决方式,然后外面再套一层即可。

这也是它的局限性,所以出的少。(只要不在线,一般可以使用 cdq 分治/整体二分 替代。)

posted @ 2025-12-23 22:45  xiehanrui0817  阅读(0)  评论(0)    收藏  举报