模板 ST表求解RMQ問題

2021-08-20 22:41:19 字數 1162 閱讀 2929

rm

q(ra

ngem

inim

umqu

ery)

r mq

(ran

gemi

nimu

mque

ry

),範圍最小值問題。具體表現為一下一類問題:

給出乙個

n n

個元素的陣列 a1

,a2,

…,an

' role="presentation" style="position: relative;">a1,

a2,…

,ana

1,a2

,…,a

n,求解 mi

n(l,

r)m in

(l,r

): 計算 mi

n min

rmqr mq

問題有很多解法,其中較為快捷和簡便的是 ta

rjan

t ar

ja

n的 sp

arse

−tab

les pa

rse−

tabl

e演算法,簡稱 st

s

t表。sp

arse

−tab

les pa

rse−

tabl

e演算法基於倍增思想,整個演算法由預處理和查詢兩部分組成,分別描述一下:

由此可見,sp

arse

−tab

les pa

rse−

tabl

e演算法思想簡單,好寫,是求解 rm

q rmq

問題的首選演算法。

具體實現的時候還要注意一點,每次用 po

w(2,

x)p ow

(2,x

)計算 2x

2

x是非常浪費時間的。由於計算機內部使用的是二進位制,我們可以用 (1

<(

1<

表示 2x

2 x。

namespace rmq 

int query(int l, int r)

}

RMQ 問題及 ST 表

rmq range minimum maximum query 問題指的是一類對於給定序列,要求支援查詢某區間內的最大 最小值的問題。很顯然,如果暴力預處理的話複雜度為 o n 2 而此類問題資料又往往很大,不僅會爆時間,陣列也存不下。我們需要一種能夠 o n log n 甚至 o n 預處理的資料...

ST表求解靜態RMQ 二維RMQ 模版

rmq range minimum query 範圍最小值問題。具體表現為一下一類問題 給出乙個 n 個元素的陣列 a1,a2,a na1,a2,an a1,a2,an 求解 min l,r min l,r min l,r 計算 min al,a l 1,ar minmi nal,al 1 arrm...

RMQ演算法 ST表

題目大意就是給你兩個長度為n的序列讓你找到乙個盡可能大的下標p使得1 p之間的任意兩個區間l r都滿足rmq u,l,r 相等其實就是最小下標相同 rmq range minimum maximum query 問題是指 對於長度為n的數列a,回答若干詢問rmq a,i,j i,j n 返回數列a中...