Loading docs/ds/sparse-table.md +6 −6 Original line number Diff line number Diff line Loading @@ -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]$ 分成相同的两部分 Loading @@ -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)}$ Loading Loading @@ -107,7 +107,7 @@ $$ ## 总结 $ST$ 表能较好的维护区间信息,时间复杂度较低,代码量相对其他算法不大。但是, $ST$ 表能维护的信息非常有限,不能较好地扩展,并且不支持修改操作。 ST 表能较好的维护区间信息,时间复杂度较低,代码量相对其他算法不大。但是, ST 表能维护的信息非常有限,不能较好地扩展,并且不支持修改操作。 ## 练习 Loading Loading
docs/ds/sparse-table.md +6 −6 Original line number Diff line number Diff line Loading @@ -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]$ 分成相同的两部分 Loading @@ -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)}$ Loading Loading @@ -107,7 +107,7 @@ $$ ## 总结 $ST$ 表能较好的维护区间信息,时间复杂度较低,代码量相对其他算法不大。但是, $ST$ 表能维护的信息非常有限,不能较好地扩展,并且不支持修改操作。 ST 表能较好的维护区间信息,时间复杂度较低,代码量相对其他算法不大。但是, ST 表能维护的信息非常有限,不能较好地扩展,并且不支持修改操作。 ## 练习 Loading