RMQ 區間最值查詢 入門

2022-03-16 20:58:18 字數 759 閱讀 3826

講解不錯:

一些細節講解:

rmq(range minimum/maximum query)即區間最值查詢。rmq演算法一般用較長時間做預處理,時間複雜度為o(nlogn),然後可以在o(1)的時間內處理每次查詢。

主要是來解決:給你乙個陣列 ,其中有n個數字,現在給你多次詢問,給你區間[l,r],問你在這個區間內的最值為多少?

我們設二維陣列dp[i][j]表示從第i位開始連續 $$2^j$$個數中的最小值。例如dp[2][1]就表示從第二位數開始連續兩個數的最小值(也就是從第二位數到第三位數的最小值),dp[i][0]就表示第i個數字本身。

void rmq_init() //rmq初始化

for(int j=1; (1

int rmq_max(int l, int r)

int rmq_min(int l, int r)

int main()

init();

int l, r;

for(int i=1; i<=q; i++)

}return 0;

}

RMQ(區間最值查詢)入門知識

1.rmq range minimum maximum query 問題 是指 對於長度為n的數列a,回答若干詢問rmq a,i,j i,j n 返回數列a中下標在i,j裡的最小 大 值,也就是 說,rmq問題是指求區間最值的問題。2.主要方法及複雜度如下 1 樸素 即搜尋 o n o qn onl...

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 之間的最大 小值。首先確定,針對每一次查詢,肯定是不能動態求最值的,因為每次都要計算,可能造成比較多的時間耗費。有 一種比較好的解決辦法是,先得到所有結果,在查詢時直接取出結果。這樣,就需要一種資料結構,能夠覆蓋所有...