st表———解決靜態rmq問題
應用範圍比較窄,只能求解區間最值查詢,可以查最大值,也可以查最小值,一般在比賽中會和思維題放在一起考察
還有一種解決靜態rmq問題的是利用線段樹
時間複雜度:
線段樹:o(nlogn)預處理,單次詢問o(logn),空間o(n)
st表:o(nlogn)預處理,單次詢問o(1),空間o(nlogn)
主要掌握好兩個函式
第乙個是st表的預處理函式,查最大值和最小值是一樣的,在這裡我把最大值和最小值都寫出來
void st_init()
int t=log(n)/log(2);
for(int j=1;j<=t;j++)
int t=log(n)/log(2);
for(int j=1;j<=t;j++)
}return 0;
}
RMQ問題(ST表解法)
針對 範圍最值問題。對於陣列a 1 n 有操作如下 rmq l,r a中第l個數到第r個數中的最小值 最大值模擬 d i j 從i開始,長度為2j 的一段元素的最小值。可推 d i j min d i j 1 d i 1 j 1 j 1 查詢時,令k為滿足2k r l 1的最大整數,由於求最小值可重...
ST演算法解決RMQ問題
簡單說就是求區間最值問題,若是簡單的單次詢問或者是區間長度很短的詢問,可以用暴力的方法來實現,但面對大資料的時候此方法必然超時,這裡介紹 nlogn 預處理,o 1 查詢的st演算法。st的高效在於o nlogn 的時間預處理,o 1 的時間來查詢。其主要思想就是將所求的區間化為兩個小區間,這兩個區...
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 ...