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 ...