線段樹,樹狀陣列,RMQ之間的區別與聯絡

2021-06-29 15:18:04 字數 464 閱讀 4489

樹狀陣列主要用於計算區間的和,在區間元素修改值的時候能夠

快速修改而不是以o(n)的複雜度進行修改;

線段樹是把區間以樹的形式分拆為若干個小區間,每個小區間存

的都有乙個值(樹狀陣列的元素存的是區間值),所以線段樹可

以快速獲得這個區間裡面的所有的節點(元素),主要用於計算

每個區間的最大最小元素(也可以快速修改區間元素的值)

rmq是用陣列的形式儲存元素的值,用二分的方法進行計算區間

的最大最小值,所以他比較快!但是有個缺點就是每一次修改區

間的元素都會影響其最終結果,就是每一次修改都要進行一次

rmq,所以修改的時候很複雜!

所以如果單純的計算差點問線或者插線問點用樹狀陣列,如果單

純的求固定區間(即區間的元素無修改)的最大最小值用rmq!

如果既求某一區間的最值且又修改值就用線段樹!

線段樹與樹狀陣列的詳解及區別

線段樹,一種二叉搜尋樹。它將一段區間劃分為若干單位區間,每乙個節點都儲存著乙個區間,每個單元區間對應線段樹中的乙個葉結點。可用於區間求和,區間最大值,區間修改,單點修改等操作。修改 查詢 統計 o log n 具體操作再寫 o 4 n 但是,可以用線段樹維護的問題必須滿足區間加法。e.g.1 區間求...

線段樹,樹狀陣列,主席樹

樹狀陣列 主席樹 包括無修改和可修改。用乙個滿二叉樹 葉子節點可以為空 來維護乙個連續陣列,整個樹的所有葉子節點從左到右表示整個陣列,每個非葉子節點表示其所有葉子的集合所描述的乙個連續子陣列的某一特性 最小值,最大值等 可以在logn的複雜度內實現對任意連續欄位的給定特性的查詢 最小值等 可以在lo...

線段樹 劃分樹 樹狀陣列

線段樹 利用陣列來維護乙個類似字首和的區間和 在查詢的時候查這個區間陣列 特殊操作 有延時標記 在區間陣列上增加基本不改變原來陣列 以達到節省時間的目的 樹狀陣列 和線段樹類似 乙個用乙個陣列維護類似字首和的東西 但 是 它維護的是乙個用二進位制表示的字首和 舉個例子 1是1 2是1 2 3是3 4...