模板 ST表 洛谷P3865

2021-10-01 01:43:07 字數 1048 閱讀 1444

題目背景

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

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

題目描述

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

輸入輸出格式

輸入格式:

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

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

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

輸出格式:

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

輸入輸出樣例

輸入樣例#1: 複製

8 89 3 1 7 5 6 0 8

1 61 5

2 72 6

1 84 8

3 71 8

輸出樣例#1: 複製99

7798

79

#include

#include

#include

using

namespace std;

int f[

100001][

40],a,x,lc,n,m,p,len,l,r;

intmain()

lc=(int)(

log(n)

/log(2

));for

(int j=

1;j<=lc;j++

)for

(int i=

1;i<=n-(1

<;i++

) f[i]

[j]=

max(f[i]

[j-1

],f[i+(1

<<

(j-1))

][j-1]

);for(

int i=

1;i<=m;i++

)return0;

}

洛谷 P3865 模板 ST表

st表可以解決rmq問題,即區間最大值 最小值 速度快 預處理的時間複雜度是o nlogn 查詢的時間複雜度是o 1 不支援修改操作 st表借助於乙個陣列實現 st i j 表示從i為起點,2j個長度的區間最大值。顯然,st i 0 a i 即從i開始1個單位長度的最大值就是i。然後是乙個雙層迴圈,...

模板 ST表(洛谷P3865)

給定乙個長度為 n 的數列,和 m 次詢問,求出每一次詢問的區間內數字的最大值。第一行包含兩個整數 n m 分別表示數列的長度和詢問的個數。第二行包含 個整數,記為 a i 依次表示數列的第 i 項。接下來 m 行,每行包含兩個整數 l i,r i 表示查詢的區間為 l i,r i 輸出包含 m 行...

ST表 (模板) 洛谷3865

題目背景 這是一道st表經典題 靜態區間最大值 請注意最大資料時限只有0.8s,資料強度不低,請務必保證你的每次查詢複雜度為 o 1 o 1 題目描述 給定乙個長度為 n n 的數列,和 m m 次詢問,求出每一次詢問的區間內數字的最大值。輸入輸出格式 輸入格式 第一行包含兩個整數 n,m n,m ...