1. 程式人生 > >10.25總結+樹狀陣列入門

10.25總結+樹狀陣列入門

週三的訓練三一整套Div2的題目,前三題是思維題,第四題雙端佇列/優先佇列+bfs,翻了翻書,書上有介紹這種方法,不過不知道的話還是很容易WA。

         樹狀陣列就是記錄某一序列的字首和的陣列,不同情況下陣列的下標可能不同,例如單純的統計序列1~n字首和的話,在1~n範圍上維護樹狀陣列,而對於像求逆序對或者統計序列中 某一段內 共有多少個數  這樣的題目,則需要在序列數值範圍上維護樹狀陣列。

        樹狀陣列最基本的操作是區間查詢和單點增加。

        由此可拓展出來的題型有 單點查詢數值+區間增加、區間增加+區間查詢陣列和。

        對於區間增加,

    暴力方法:一個一個位置做單點增加。

    優化:處理方法是在維護樹狀陣列時對應的首位置加上數值,在尾部減去數值。 這樣對樹狀陣列查詢時得到的1~x字首和即原陣列對應位置的增加量。

       區間查詢:思路sum【j】-sum【i-1】,同時當增加操作為區間增加時,因為樹狀陣列維護的是 單個元素 的數值的變化情況,所以不好統計相應和,不過容易想到當前的區間和,就等於 區間內每一個元素的數值增量+初始的區間和。然後,,,推匯出一個式子,,,,最後,我們可以將答案分為兩個部分,然後分別維護兩個樹狀陣列即可。