Unverified Commit 6ae030aa authored by Xeonacid's avatar Xeonacid Committed by GitHub
Browse files

Update sparse-table.md

parent d2d00cb2
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -16,17 +16,17 @@ RMQ 是英文 Range Maximum/Minimum Query 的缩写,表示区间最大(最

## ST 表

 $ST$ 表基于倍增思想,可以做到 $O(n\log n)$ 预处理, $O(1)$ 回答每个询问。但是不支持修改操作。
 ST 表基于倍增思想,可以做到 $O(n\log n)$ 预处理, $O(1)$ 回答每个询问。但是不支持修改操作。

暴力跑的慢的原因在于检索了每一个点。

但是,如果我们预处理出每一段的最大值,就可以将效率提高很多。

令 $f[i][j]$ 表示 $[i,i+2^j-1]$ 的最大值。
令 $f[i,j]$ 表示 $[i,i+2^j-1]$ 的最大值。

显然, $f[i][0]=a[i]$ 
显然, $f[i,0]=a[i]$ 

根据定义式,写出状态转移方程: $f[i][j]=\max(f[i][j-1],f[i+2^{j-1}][j-1])$ 
根据定义式,写出状态转移方程: $f[i,j]=\max(f[i,j-1],f[i+2^{j-1},j-1])$

我们可以这么理解:将区间 $[i,i+2^j-1]$ 分成相同的两部分

@@ -40,7 +40,7 @@ RMQ 是英文 Range Maximum/Minimum Query 的缩写,表示区间最大(最

对于每个询问 $[x,y]$ ,我们把它分成两部分

 $f[x][s]$  $f[y-2^s+1][s]$ 
 $f[x,s]$  $f[y-2^s+1,s]$ 

其中 $s=\log_2{(y-x+1)}$ 

@@ -107,7 +107,7 @@ $$

## 总结

 $ST$ 表能较好的维护区间信息,时间复杂度较低,代码量相对其他算法不大。但是, $ST$ 表能维护的信息非常有限,不能较好地扩展,并且不支持修改操作。
 ST 表能较好的维护区间信息,时间复杂度较低,代码量相对其他算法不大。但是, ST 表能维护的信息非常有限,不能较好地扩展,并且不支持修改操作。

## 练习