st表複習筆記

2022-06-03 21:24:18 字數 854 閱讀 4183

st表,一種高效的區間最值查詢(rmq)演算法。本質其實是乙個動態規劃。

其實吧,對於看過線性dp的人來說應該不難理解,只是處理有些麻煩。但是本土狗因為-1的問題居然改了許久...

用兩個2^i的區間把整個區段覆蓋,dp[i][j]表示區間最值,從i開始,向前2^j個數字。根據動態規劃的定義,把這個區間分割成兩個小區間,於是就有

dp[i][j]=max(dp[i][j-1],dp[i][i+(1一直分割下去,直到1。複雜度o(nlogn)。

於是查詢:

我們找到左右區間大小(y-x+1),把它log一下,再2的次方一下,就成了覆蓋區間的最大2^i次方的區間。同理,右區間也是。比較兩區間最值,就可以得出最值了。

code:

#include#include

using

namespace

std;

const

int maxn=100005

;int n,m,a[maxn],dp[maxn][25

],l[maxn];

intmain()

l[0]=-1

;

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

for(int j=1;j<=25;++j)

}for(int i=1;i<=m;i++)

return0;

}

模擬線段樹:

優點:1、碼量小

2、快(不用說了,線段樹常數大得呦...)

缺點:1、只能靜態

2、只能最值

(完)

ST表 學習筆記

概念 st表是用來求解區間最大值的一種優秀的離線演算法,它可以 o n logn o nlogn o nlog n 預處理,然後o 1 查詢,如何實現呢?思想運用了近似於區間dp的方法,乙個大區間有小區間轉移得到,不同的是,我們定義st i k st i k st i k 表示從第i ii個位置起,...

演算法筆記 st表

概述 用倍增法求區間最值的離線演算法,o nlogn 預處理,o 1 訪問。預處理 狀態 st i j i,i 2 j 之間的最值 狀態轉移 如果j等於0,st i j a i 如果j大於0,st i j max st i j 1 st i 2 j 1 j 1 或st i j min st i j ...

ST表學習筆記

st表是一種利用dp思想求解最值的倍增演算法 st表常用於解決rmq問題,即求解區間最值問題 接下來以求最大值為例分步講解一下st表的建立過程 1.定義 f i j 表示 i,i 2j 1 這個長度為2j的區間中的最大值 2.預處理 f i 0 a i 即區間 i,i 的最大值就是a i 3.狀態轉...