coded by jelly_goat.
這個主要是說st表的。
首先了解一下st表是什麼。
先來乙個老套的情景帶入。
(假設所有的題目都是1s,128ms)
有一天,蒟蒻jelly_goat用手(?)
給你出了一套\(n<=1000\)的資料,然後讓你輸出\(m<=1000\)次最小值。
你說了,那不就直接暴力嗎?
然後,蒟蒻jelly不服,又開始用c++出了\(n<=10000\),\(m<=10000\)的資料。
你可能開始疑惑了,那我就線段樹吧。
蒟蒻jelly_goat非得要卡住你,給你又用python3出了一套\(n<=200000\),\(m<=300000\)的資料。
你說,我還會樹狀陣列然後卡一卡常就過了。
事實上你最後幾個測試點已經tle的一聲哭了出來。
於是jelly不死心,又來了一套\(n<=200000\),\(m<=1000000\)的資料。
你攤一攤手,這可咋整?貓樹
st表,又名稀疏表,是一種靜態提供\(o(1)\)詢問的資料結構。
但是建立這個資料結構的實質是dp和倍增思想的結合。
st[i][j]
表示區間\([i,i+(2^j)-1]\)的m(max or min)。
然後我們從特性逆推分析:
既然st[i][j]
表示的是上面的含義,那麼...\(st[i][j]=m(st[i][j-1],st[i+2^][j-1])\),
即劈成兩半的原先的區間\(st[i][j-1],st[i+2^][j-1]\)是可以推出st[i][j]
的。
。
演算法 ST表
想學習一下lca倍增,先 水乙個黃題 學一下st表 這是乙個運用倍增思想,通過動態規劃來計算區間最值的演算法 求出區間最值 回答詢問 求出區間最值 用 f i j 來儲存從第 j 個點開始,向後 2 i 1 個點 共 2 i 個點 中的最值 包括本身 利用二分法的思想,將區間 j,j 2 i 1 平...
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 ...
ST(稀疏表)演算法
作用 st演算法是用來求解給定區間rmq的最值,本文以最小值為例 舉例 給出一陣列a 0 5 則區間 2,5 之間的最值為1。1 離線預處理 運用dp思想,用於求解區間最值,並儲存到乙個二維陣列中。具體解釋 1 離線預處理 st演算法使用dp思想求解區間最值,貌似屬於區間動態規劃,不過區間在增加時,...