1 #include2 #include3 #include4
using
namespace
std;
5const
int n=1e6+111;6
int max[n][21],min[n][21
],a[n];
7void st(int *a,int n)//
預處理,o(nlogn) 820
}21}22
}23int log2(int
len)
2431
return
k;32}33
intmain()
3445
return0;
46 }
概述
rmq(range minimum/maximum query),即區間最值查詢,是指這樣乙個問題:對於長度為n的數列a,回答若干詢問rmq(a,i,j)(i,j<=n),返回數列a中下標在i,j之間的最小/大值。st演算法它可以在o(nlogn)時間內進行預處理,然後在o(1)時間內回答每個查詢。
參考文章:
RMQ問題之ST演算法
st演算法 st演算法是用於解決rmq問題 區間最值問題 的一種強有力的工具。o nlogn 預處理,o 1 查詢最值,利用的是倍增的思想。但 但是,使用st演算法的條件是沒有修改操作,emmm 演算法流程 最大值為例 預處理 用f i j 表示,從i位置開始的2 j 個數中的最大值,例如f i j...
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 ...