RMQ——ST表
作者:互联网
ST表
ST表是一种解决RMQ问题的强有力工具,
可以做到O(nlogn)预处理,O(1)查询。
st[i][j] 表示区间 [i, i + 2 ^ j - 1] 的最大值。
初值 st[i][0] = a[i]。
状态转移 st[i][j] = max(st[i][j - 1], st[i + 2 ^ ( j - 1)][j - 1]).。
初始化:
inline void init(){ for(int i = 1; (1 << i) <= n; i ++) for(int j = 1; j + (1 << i) - 1 <= n; j ++){ st[j][i] = max(st[j][i - 1], st[j + (1 << (i - 1))][i - 1]); } }
查询:
对于每个询问,拆成 [l, l + 2 ^ k - 1], [r - 2 ^ k + 1, r], k = log2(r - l + 1) 下取整
inline int query(int l, int r){ int k = log2(r - l + 1); return max(st[l][k], st[r - (1 << k) + 1][k]; }
标签:RMQ,log2,int,max,st,ST 来源: https://www.cnblogs.com/William-Sg/p/15863031.html