資料結構 ST表

2021-09-08 20:52:32 字數 965 閱讀 4006

只遞推狀態空間在2的整數次冪位置上的值作為代表。當需要其他位置的值時,我們通過「任意整數可以表示成若干個2的次冪項的和」這一性質,使用之前求出的代表值拼出所需要的值。

狀態空間關於2的次冪具有可劃分性

1 int power(int a,int b,int p)

2 10 return ans;

11 }

快速冪忘了,多花了十分鐘重新學。。。我太弱了qaq

p.s.位運算什麼的自己去看看就好了,很有用的。

先提一下,st演算法主要是用來解決區間最值問題的(rmq)

rmq:給定乙個長度為n的數列a,求下標為閉區間[l,r]中ai的最值。

實現:設fi,j表示子區間[i,i+2j-1]裡的最大值,也就是從i開始的2j個數的最大值。邊界f[i,0]=a[i]。

當詢問任意區間[l,r]的最值時,先計算出區間長度,滿足2k那麼  從l開始的2k個數 與  以r結尾的2k個數  兩端一定覆蓋了l,r。

int log[n];//log[i]表示log2 d向下取整

log[0]=-1;//邊界條件,使log[1]=0;

void st_prework()

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

f[i][0]=a[i],log[i]=log[i>>1]+1;//預處理邊界,log值

for(int j=1;j總的來說,st表在rmq問題上,不管是時間還是空間都表現得非常優秀。但是一遇到修改,st表就不好維護了。

這時我們就要用到更加複雜高階的資料結構——線段樹

資料結構 ST表

倍增查詢表 區間查詢,單點多層次查詢,求lca 倍增思想,能夠快速向上推進查詢。void init intquery int a,int b lca模板 bzoj 1787 meet 緊急集合 description 歡樂島上有個非常好玩的遊戲,叫做 緊急集合 在島上分散有n個等待點,有n 1條道路...

模板 資料結構 ST表 二維ST表

區間最大值,o nlogn 預處理,o 1 查詢,不能動態修改。在查詢次數m顯著大於元素數量n的時候看得出差距。令 f i j 表示 i,i 2 j 1 的最大值。顯然,f i 0 a i 根據定義式,寫出狀態轉移方程 f i j max f i j 1 f i 2 j 1 我們可以這麼理解 將區間...

資料結構學習筆記 ST表

rmq range mininum maxnum query 即區間最值查詢。對於長度為 n 的陣列 a 有若干次詢問 rmq i,j 回答下標區間 i,j 內的最大 最小值。st表可以很好地解決此類問題,預處理複雜度 o nlogn 查詢 o 1 設 a i 是要求區間最值的陣列,f i j 表示...