st表求區間最大值

2022-05-19 11:24:14 字數 651 閱讀 5785

第一行給出乙個數字n,接下來n+1行,每行給出乙個數字ai,(0<=i<=n<=1e6)

接來給出乙個數字q(q<=7000),代表有q個詢問

每組詢問格式為a,b即詢問從輸入的第a個數到第b個數,其中的最大值是多少

如題所述

1001

2323

4321

050 10

2 43 7

7 98 8

434

32

這題就怎麼說呢,範圍怎麼大,暴力顯然超時,st表表示起來也簡單,就是一直把乙個區間分成兩塊,求兩塊的最大值再比較(怎麼那麼像區間dp),然後這種劃分又要用到倍增,就需要二進位制,所以理解起來還是有一定的難度(有dp的預處理)

**:

1 #include2 #include3

using

namespace

std;

4char ch; bool

ok;5

void read(int &x)

10int a[1000001],n,m,f[1000001][21

],x,y,now;

11void st(int

n)12

18int

main()

1933 }

ST表 (求區間最大 最小值)

st表的功能很簡單 它是解決rmq問題 區間最值問題 的一種強有力的工具 它可以做到o nlogn 預處理,o 1 是查詢最值 像線段樹是o logn 的查詢 st表是利用的是倍增的思想 拿最大值來說 我們用st i j 表示,從i位置開始的2 j個數中的最大值,例如st i 1 表示的是i位置和i...

區間最大最小值 ST表

這是一道st表經典題 靜態區間最大值 請注意最大資料時限只有0.8s,資料強度不低,請務必保證你的每次查詢複雜度為 o 1 o 1 若使用更高時間複雜度演算法不保證能通過。如果您認為您的 時間複雜度正確但是 tle,可以嘗試使用快速讀入 inline int read while isdigit c...

數列區間最大值 RMQ問題(ST演算法模板)

輸入一串數字,給你 m個詢問,每次詢問就給你兩個數字 x,y,要求你說出 x 到 y 這段區間內的最大數。輸入格式 第一行兩個整數 n,m 表示數字的個數和要詢問的次數 接下來一行為 n 個數 接下來 m 行,每行都有兩個整數x,y 輸出格式 輸出共 m 行,每行輸出乙個數。樣例樣例輸入 10 2 ...