假如我們要求區間的最大值,怎麼辦(用一位陣列搞定)?
沒事,我們有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之間的最小 大值。這兩個問題是在實際應用中經常遇到的問題,下面介紹一下解決這兩種問題的比較高效的演算法...