簡單講RMQ ST演算法

2021-07-23 14:25:34 字數 762 閱讀 9123

假如我們要求區間的最大值,怎麼辦(用一位陣列搞定)?

沒事,我們有rmq。

今天略講講rmq的st演算法,非常水,希望大家都能學會。

我們設fi,

j 表示區間

[i,i

+2j−

1]的最大值。

對於狀態轉移,我們可以將區間[i

,i+2

j−1]

看作[i

,i+2

j−1−

1]和[i+

2j−1

,i+2

j−1]

兩個區間。

狀態轉移方程顯然為fi

,j=m

ax(f

i,j−

1,fi

+2j−

1,j−

1)對於詢問,我們只需要o(

1)解決。

我們只需要詢問兩端區間的最大值,設m=

log2

r−l+

1 ,則這兩端區間是[l

,r−2

m]和[r−

2m+1

,r] 。

隨手打的,隨便看看,理解一下。

#include

#include

#include

using

namespace

std;

int f[1005][10],i,j,m,l,r,n,q,ans;

int main()

}

RMQ ST演算法模板

rmq 範圍最小值問題。給出乙個n個元素的陣列a1,a2,an,設計乙個資料結構支援查詢操作query l,r 計算min。每次用乙個迴圈來求最小值顯然不夠快快,字首和的思想也不能提高效率,這時候st演算法就派上用場了,它預處理的時間是o nlogn 但是查詢只需要q 1 而且常數很小。令dp i ...

rmq ST演算法(矩陣最值)

已知某矩陣中的值已經確定,需求矩陣中某個小矩陣的最值 st演算法 我們可以將每一行看作一維的rmq maxx i j k 表示 第i行 j,j 1模板 include include include using namespace std const int n 1e3 7 const int in...

記筆記記筆記 RMQ ST演算法

1.概述 rmq range minimum maximum query 即區間最值查詢,是指這樣乙個問題 對於長度為n的數列a,回答若干詢問rmq a,i,j i,j n 返回數列a中下標在i,j之間的最小 大值。這兩個問題是在實際應用中經常遇到的問題,下面介紹一下解決這兩種問題的比較高效的演算法...