ST 表(Sparse Table,稀疏表)初步
定义
ST 表(Sparse Table,稀疏表)是用于解决可重复贡献问题的数据结构。其主要用于 RMQ 问题。
:RMQ 是 Range Maximum/Minimum Query 的缩写,表示区间最大(最小)值。
思路
设 为区间 中的最大值。
即有 。
其余 。
实现
#include <bits/stdc++.h>
using namespace std;
int n, m, st[100005][25];
inline int read(){ // 快读
int x = 0, f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){
if (ch == '-') f = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
x = x * 10 + ch - 48;
ch = getchar();
}
return x * f;
}
inline void write(int x){ // 快写
if(x > 9) write(x / 10);
putchar(x % 10 + 48);
}
inline int pow2(int x){//2^x
return 1 << x;
}
int main(){
n = read();
m = read();
for(int i = 1; i <= n; i++) st[i][0] = read();
for(int i = 1; pow2(i) <= n; i++){
for(int l = 1; l <= n; l++){
int r = l + pow2(i) - 1;
if(r <= n)
st[l][i] = max(st[l][i - 1], st[l + pow2(i - 1)][i - 1]);
}
}
while(m--){
int l = read(), r = read();
int k = log2(r - l + 1);
write(max(st[l][k], st[r - pow2(k) + 1][k]));//O(1) 查询
putchar('\n');
}
return 0;
}
优劣
像所有的数据结构一样,ST 表亦有它的优与缺。
优势
-
除 RMQ 以外,还有其它的可重复贡献问题。如区间按位和、区间最大公因数等均可用 ST 表实现维护。
-
时间复杂度较低,码量相对于其他算法较小。查询的时间复杂度可至 。
劣势
- 不支持区间修改,也无法很好地应用于其他问题。
Thank's for your reading!
本文来自博客园,作者:KukCair,转载请注明原文链接:https://www.cnblogs.com/KukCair/p/18472742
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步