LG p3865 RMQ問題之ST表

2021-08-28 08:10:25 字數 1070 閱讀 5926

題目鏈結

題目背景

這是一道st表經典題——靜態區間最大值

請注意最大資料時限只有0.8s,資料強度不低,請務必保證你的每次查詢複雜度為 o(1) o(1)

題目描述

給定乙個長度為 n 的數列,和 m 次詢問,求出每一次詢問的區間內數字的最大值。

輸入輸出格式

輸入格式:

第一行包含兩個整數 n, m,分別表示數列的長度和詢問的個數。

第二行包含 n個整數(記為ai),依次表示數列的第 i 項。

接下來 m行,每行包含兩個整數 li,ri,表示待查詢的區間為[li , ri].

輸出格式:

輸出包含 m行,每行乙個整數,依次表示每一次詢問的結果。

輸入輸出樣例

輸入樣例#1:

輸出樣例#1 說明

對於30%的資料,滿足: 1 ≤n,m≤10

對於70%的資料,滿足: 1<=n,m<=10^5

對於100%的資料,滿足:1<=n<=1e5,1<=m<=1e6,ai∈[0,10^9],1<=li<=ri<=n

rmq問題,可以用st表來解決:預處理o(nlogn),查詢o(1).

用f[i][j]表示從區間[i,i+2^j-1]中的最大值。

具體過程如圖:

void

pre(

)

int

query

(int l,

int r)

#include

const

int n=

1e5+5;

int n,m;

int a[n]

;int f[n][15

];intmax

(int a,

int b)

void

pre(

)int

query

(int l,

int r)

intmain()

return0;

}

RMQ問題之ST演算法

st演算法 st演算法是用於解決rmq問題 區間最值問題 的一種強有力的工具。o nlogn 預處理,o 1 查詢最值,利用的是倍增的思想。但 但是,使用st演算法的條件是沒有修改操作,emmm 演算法流程 最大值為例 預處理 用f i j 表示,從i位置開始的2 j 個數中的最大值,例如f i j...

RMQ問題之ST演算法

rmq問題 求長度為n的數列中,求 i,j 直接的最值。st演算法 一種動態規劃的方法。一 預處理dp陣列 對於區間 i,i 2 j 1 的最值,只需要知道區間 i,i 2 j 1 1 和區間 i 2 j 1 i 2 j 1 的最值即可。由此可的遞推方程 dp i,i 2 j 1 max dp i,...

RMQ問題 ST演算法

rmq問題 rmq問題是指求區間最值的問題。rmq演算法 st演算法 時間複雜度 預處理o nlogn 查詢o 1 以求最大值為例,設d i,j 表示 i,i 2 j 1 這個區間內的最大值,那麼在詢問到 a,b 區間的最大值時答案就是max d a,k d b 2 k 1,k 其中k是滿足2 k ...