資料結構 二 RMQ 區間最值查詢

2021-09-21 14:03:44 字數 718 閱讀 4156

rmq 和普通陣列的區別是: rmq 是二維陣列, 維度為

\, 其中 rmq

[i][

j]

rmq[i][j]

rmq[i]

[j] 表示的是從 a[i

]a[i]

a[i]

開始長度為 2

j2^j

2j的區間的最小值, 那麼顯然, 它的初始化可以遞迴進行, 且複雜度為 o(n

logn

)o(nlogn)

o(nlog

n)當要查詢 [l,

r]

[l, r]

[l,r

] 區間的最小值時, 我們可以進行如下操作:

記 len = r-l+1

得到小與等於 len 的最大的 2 的冪次, 記為 k

返回 min

min\

min然後上述操作的複雜度為 o(1

)o(1)

o(1)

#define maxn 100000

int rmq[maxn][20

];intmin

(int a,

int b)

void

init()

}}intrangemin

(int from,

int to)

這種二分的思想值得學習.!

學!

ACM常用模板 資料結構 區間最值查詢RMQ

一 基於st的rmq include include include using namespace std const intmaxn 100005 intdp maxn 20 a maxn n m s陣列下標從0開始 void init rmq intrmq intl intr void ini...

RMQ 區間最值查詢演算法

rmq range minimum maximum query 對於長度為n的數列a,回答若干詢問rmq a,i,j i,j n 返回數列a中下標在i,j裡的最小 大 值。主要方法 樸素 即搜尋 複雜度為o n 線段樹能在對數時間內在陣列區間上進行更新與查詢。預處理 o n 查詢 o logn 定義...

RMQ問題(區間最值查詢)

有一類問題被稱作區間最值問題,描述的是,給定 n 個元素,需要查詢下標位於 p q 之間的最大 小值。首先確定,針對每一次查詢,肯定是不能動態求最值的,因為每次都要計算,可能造成比較多的時間耗費。有 一種比較好的解決辦法是,先得到所有結果,在查詢時直接取出結果。這樣,就需要一種資料結構,能夠覆蓋所有...