2022 2 25 倍增思想和ST表

2022-09-24 05:24:12 字數 755 閱讀 7145

倍增:將線性級轉換成對數級,降低時間複雜度

只考慮二的整數冪次,縮小查詢範圍。

運用:1.快速冪:算n的m次方,log(n)

遞推法:

int ans = 1

;while

(n)

2.rmq問題:n個數字m次詢問,每次[l,r]中最大值

運用st表,預處理 o(nlogn),查詢o(1)

想法是將每次要查詢的區間的最值預先就搞定了,用2的次冪使得每個f代表【從i到i+2^j-1】這個區間的最大值,然後再在【從i到i+2^(j-1)-1】和這個【從i+2^(j-1)到i+2^(j-1)+2^(j-1)-1】即【從i+2^(j-1)到i+2^j-1】

兩個區間中選最大,其實正好覆蓋了【從i到i+2^j-1】的區間,而該f表達為f【i】【j】——【從i到i+2^j-1】的最大值;

預處理pre1——log值

int log[21

];log[

1] = 0

;void pre1(int

n)

預處理pre2——f[i][j]都存入

int f[n][21

];void pre2(int

n)

輸出公式:

int s = (l + 1 -r);

printf("%d

", max(f[l][s], f[r - (1

<< s) + 1][s]));

知識點 2 6 倍增思想

總目錄 2 演算法基礎 2.6 倍增思想 前言 倍增通常和二分一起介紹,共同點在於 它們都能神奇地將原本複雜度為 n 的過程下降到 log n,對於大型資料而言,這種效率的提高是顯而易見的。子目錄列表 1 二進位制與倍增 2 例題 3 應用 2.6 倍增思想 1 二進位制與倍增 眾所周知,二進位制與...

歸納(二) 倍增

把一步一步往上爬變成一次一次向前跳,從 o n o log 的蛻變,可以解決很多問題。anc i k anc anc i k 1 k 1 就這麼一行。我的 2 級祖先就是我 2 級祖先的 2 級祖先。就憑這句話,就可以解決很多問題了。洛谷p1613跑路 小a的工作不僅繁瑣,更有苛刻的規定,要求小a每...

LCA 二分 倍增

兩個最近的點u和v的最近的公共的祖先稱為最近公共祖先 lca 普通的lca演算法,每算一次lca的時間複雜度為線性o n 這裡講lca 二分的方法。首先對於任意的節點v,利用其父節點的資訊,可以通過par2 v par par v 得到向上走兩步的節點。依此資訊可以通過par4 v par2 par...