1. 程式人生 > >樹狀數組入門講解

樹狀數組入門講解

前綴 二叉搜索樹 時間復雜度 復雜 lowbit 數據結構 查詢 問題 區間

平常我們會遇到一些對數組進行維護查詢的操作,比較常見的,修改某點的值、求某個區間的和。

即給定一個n個元素的數組$A_1、A_2、..., A_n$,你的任務是設計一個數據結構,支持以下兩種操作:

  1. $Add(x,d)$操作:讓$A_x$增加$d$。
  2. $Query(L,R)$:計算$A_L+A_{L+1}+...+A_R$。

如果按簡單的前綴和處理,修改操作是$O(1)$,區間查詢操作是$O(n)$,當操作次數為m時,最壞的時間復雜度是$O(mn)$,n很大時顯然無法接受。如何讓Query和Add都能快速完成呢?有一種稱為二叉搜索樹(Binary Indexed Tree, BIT)的數據結構(俗稱樹狀數組),可以很好地解決這個問題。為此,我們需要先介紹lowbit。

lowbit

樹狀數組入門講解