以行建立线段树,点 \([l,r]\) 存贮横坐标在这个范围内的正方形面积的最大值。
合并信息的话,就比较套路了,考虑左儿子和右儿子各自的最大值,以及组合能产生的最大值。
中间那条分割线的两侧,各自有两个柱状图,表示最长的连续的 \(1\)。
设两侧的长度各位 \(h,g\),这个是可以直接合并得到的。
会发现答案就是:
若是考虑双指针,会发现我们需要撤销一个数对于 \(\min\) 的影响,此时应该怎么办呢?
Naive 的 Rui_R
提供了带一只 \(\log\) 的 st 表做法。
但实际上可以单调队列直接搞,不用考虑撤销影响这种鬼东西。
那么也就是说,每个节点的修改复杂度为 \(\operatorname O(m)\)。
预处理复杂度则为 \(\operatorname O(nm)\),单次修改复杂度为 \(\operatorname O(m\log n)\)。
考虑一次查询我们应该怎么办?
其实很也很套路,可以像刚刚合并左右儿子一样,合并查询到的 \(\log\) 个区间的信息。
看题解之前一直在往切比雪夫距离那里想,毕竟一开始受 Point_King
巨佬思路的影响,导致完全不想去考虑线段树。
原文:https://www.cnblogs.com/zjjws/p/14136071.html