RMQ之ST演算法模板

2022-04-11 02:40:41 字數 583 閱讀 1358

1 #include2 #include

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