線段樹總結 一 入門篇

2021-08-02 05:37:35 字數 702 閱讀 9467

今天寫寫總結,線段樹作為乙個常考常新,每次看到了都會有:"還有這種操作?"的謎之資料結構,我們要記住,線段樹是序列元素個數確定的(某些特殊的題是可以離線支援刪除操作),操作支援區間的封閉性,翻轉操作只支援01序列的翻轉,整數序列的翻轉是不支援的。本篇部落格主要介紹線段樹的基本操作,也就是那些典型的線段樹題目,由於博主較懶,而且大部分題目都是博主之前寫過的部落格,這裡博主就直接粘部落格鏈結了。

簡單的端點更新

注意線段樹的空間大小一般開到n(元素個數)*4 為了縮減**可以去自定義巨集 遞迴時的l,r都是閉區間

端點更新的特殊用處:加速模擬約瑟夫問題(要求輸出每次死掉的是幾號) 詢問某個點的逆序對

約瑟夫環 

區間更新:

這裡就要講一下lazy標記了。lazy標記打到某一層時,這一層要完成相關的操作。也就是說lazy標記記錄的是這一層未向下一層傳遞的資訊,與本層中藥維護的資訊無關。由於乙個區間最多被分為logn段,所以lazy標記的複雜度是logn。在訪問或更新之前要把lazy裡的資訊清空,並傳遞下去(pushdown). 每段更新完後要由子區間更新當前區間(pushup) 有時線段樹的題難就難在pushdown 和pushup 函式。有時這兩個函式要進行大量的討論,有時和序列長度有關。

簡單的區間更新:

通過上面的題,對線段樹應該有個大體的了解了,假如基本操作還覺得不熟悉的話可以去看not_only_success的部落格。博主也是按照他的部落格學習的基本操作。

線段樹之入門篇

線段樹 interval tree 是把區間逐次二分得到的一樹狀結構,它反映了包括歸併排序在內的很多分治演算法的問題求解方式。上圖是一棵典型的線段樹,它對區間 1,10 進行分割,直到單個點。這棵樹的特點 是 1.每一層都是區間 a,b 的乙個劃分,記 l b a 2.一共有log2l層 3.給定乙...

字典樹 Trie 入門篇

字典樹 trie 字典樹 又稱字首樹 給出字串集合 code cook five file fat,我們設根節點為空節點,那麼其trie樹如下所示 字典樹又稱字首樹,給出乙個字串集合,我們可以通過公共字首將整個字串集合存到乙個樹形結構中,一旦形成了集合中的字串,我們只需在樹上的相應節點打上標記 儲存...

HOOK API入門篇 一

windows系統是建立在事件驅動的機制上的,說穿了就是整個系統都是通過訊息的傳遞來實現的。而鉤子是windows系統中非常重要的系統介面,用它可以截獲並處理送給其他應用程式的訊息,來完成普通應用程式難以實現的功能。鉤子可以監視系統或程序中的各種事件訊息,截獲發往目標視窗的訊息並進行處理。這樣,我們...