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的區間都可以...