RMQ 問題及 ST 表

2022-07-21 15:18:22 字數 855 閱讀 1597

rmq(range minimum/maximum query)問題指的是一類對於給定序列,要求支援查詢某區間內的最大、最小值的問題。很顯然,如果暴力預處理的話複雜度為 \(o(n^2)\),而此類問題資料又往往很大,不僅會爆時間,陣列也存不下。我們需要一種能夠 \(o(n\log n)\) 甚至 \(o(n)\) 預處理的資料結構,這便是st表。

st表(sparse table,應譯為s表)是一種可以以 \(o(n\log n)\) 的優秀複雜度預處理出靜態區間上的最大、最小值的演算法,其核心是倍增的思想。它使用 \(st[i][j]\) 表示原陣列中 \(i\rightarrow i+2^j-1\) 的區間的最值。那麼在查詢時,只用找出兩點間的距離的最小2的整數冪,然後從區間起點與終點減去這個冪分別查詢取最值即可,比如要查詢 \(2\rightarrow 7\),就可以先查詢 \(2\rightarrow 5\),再查詢 \(4\rightarrow 7\),然後相比較即可。

題目st表模板 題目大意:求靜態區間最大值。

**

#includeusing namespace std;

int n, m;

int st[1000005][25];

int read()

while (isdigit(ch))

return x * op;

}void init()

int work(int l, int r)

int main()

模板 ST表求解RMQ問題

rm q ra ngem inim umqu ery r mq ran gemi nimu mque ry 範圍最小值問題。具體表現為一下一類問題 給出乙個 n n 個元素的陣列 a1 a2,an role presentation style position relative a1,a2,ana...

RMQ演算法 ST表

題目大意就是給你兩個長度為n的序列讓你找到乙個盡可能大的下標p使得1 p之間的任意兩個區間l r都滿足rmq u,l,r 相等其實就是最小下標相同 rmq range minimum maximum query 問題是指 對於長度為n的數列a,回答若干詢問rmq a,i,j i,j n 返回數列a中...

RMQ問題 ST演算法

rmq問題 rmq問題是指求區間最值的問題。rmq演算法 st演算法 時間複雜度 預處理o nlogn 查詢o 1 以求最大值為例,設d i,j 表示 i,i 2 j 1 這個區間內的最大值,那麼在詢問到 a,b 區間的最大值時答案就是max d a,k d b 2 k 1,k 其中k是滿足2 k ...