ST表
ST表
ST表它是解决 RMQ 问题(区间最值问题)的一种强有力的工具。
时间复杂度为 $O(n \log n+Q)$。
实现过程
PS:以下讨论的是最大值,最小值同理。
建立一个 $dp$ 数组 $dp_{i,j}$ 表示从 $i$ 开始 $2^j$ 个数中的最大值。
边界为 $dp_{i,0}=a_i$,即从 $i$ 点开始 $2^0$ 个数中的最大值。
我们不难发现 $\max{\max{a_1 … a_{\frac{n}{2}}},\max{a_{\frac{n}{2}} … a_n}}}=\max{a_1…a_n}$。
那状态转移方程为:
$dp_{i,j}=\max{dp_{i,j-1},dp_{i+2^{j-1},j-1}}$。
其中 $dp_{i,j-1}$ 是前面一段,$dp_{i+2^{j-1},j-1}$ 是后面一段。
求最值
将该区间分成两个ST表,然后直接维护的小区间,然后二者求最值即可。
就是:$\max{f_{l,k},f[r−(2^k)+1][k]}$。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 heyZzz's OI Blog!