RMQ問題之ST演算法

2021-09-10 10:04:45 字數 749 閱讀 3531

st演算法

st演算法是用於解決rmq問題(區間最值問題)的一種強有力的工具。

o(nlogn)預處理,o(1)查詢最值,利用的是倍增的思想。

但…但是,使用st演算法的條件是沒有修改操作,emmm

演算法流程(最大值為例)

①預處理

用f[i][j]表示,從i位置開始的2^j 個數中的最大值,例如f[i][j]表示的是a[i][i+2^j-1]這個區間的最大值。

轉移的時候我們可以把當前區間拆成兩個區間並分別取最大值。

f[i][j]分為f[i][j-1]和f[i+2^(j-1)][j-1]

②詢問詢問左端點l,右端點r;

k=log2(r-l+1)

然後對於左端點和右端點分別進行查詢,這樣可以保證一定可以覆蓋查詢的區間。

左端點查詢區間[l,l+2^k-1]

右端點查詢區間[r-2^k+1,r]

講的可能比較抽象,可以畫個圖好好理解一下

**實現

**就比較好理解了,需要注意的:1.加減乘除的優先順序高於位運算 2.雙重迴圈外層是j,下面附模板st演算法**

const int maxn=1e5+5;

int n,m,x,y;

int a[maxn],f[maxn][21];

int query(int l,int r)

{ int k=log2(r-l+1);

return max(f[l][k],f[r-(1《就快是豬年啦,提前祝新年快樂,菜雞新年也要繼續加油鴨

RMQ問題之ST演算法

rmq問題 求長度為n的數列中,求 i,j 直接的最值。st演算法 一種動態規劃的方法。一 預處理dp陣列 對於區間 i,i 2 j 1 的最值,只需要知道區間 i,i 2 j 1 1 和區間 i 2 j 1 i 2 j 1 的最值即可。由此可的遞推方程 dp i,i 2 j 1 max dp i,...

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

RMQ問題的ST演算法

st sparse table 演算法的基本思想是,預先計算從起點a i 開始長度為2的j次方 j 0,1.logn 的區間的最小值,然後在查詢時將任何乙個區間a i.j 劃分為兩個預處理好的可能重疊的區間,取這兩個重疊區間的最小值。在預處理階段,從起點a i 開始,任何乙個長度為2 j的區間都可以...