題目鏈結
題目背景
這是一道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 ...