文章目录
稀疏表
学习稀疏表:https://www.youtube.com/watch?v=c5O7E_PDO4U
稀疏表(Sparse Table),也叫ST表,用来解决范围最值查询(Range Minimum Query)问题。
假设有一个数组,我们需要对该数组执行如下操作(以下全部假设数组下标从0开始):
- 求一个区间 [ l o w , h i g h ] [low,high] [low,high]内的最大值
不同的解决方法所花的时间不同:
解决方法 | 预处理时间 | 查询时间 |
---|---|---|
普通数组 | O ( 1 ) O(1) O(1) | O ( n ) O(n) O(n) |
动态规划 | O ( n 2 ) O(n^{2}) O(n2) | O ( 1 ) O(1) O(1) |
线段树 | O ( n ) O(n) O(n) | O ( log 2 n ) O(\log_{2}n) O(log2n) |
稀疏表 | O ( n log 2 n ) O(n\log_{2}n) O(nlog2n) | O ( 1 ) O(1) O(1) |
因此,稀疏表在上面4种方式中是最好的。
构造稀疏表
假设数组的大小为 N N N。
首先需要一个二维数组 F [ N ] [ ⌊ log 2 N ⌋ + 1 ] F[N][\lfloor{\log_{2}N}\rfloor+1] F[N][⌊log2N⌋+1],其中