ACM模板 樹狀陣列

2021-08-22 06:04:47 字數 1090 閱讀 1678

二、應用:

三、模板**:

1、區間求和型別:

#include#include#define mem(a,b) memset(a,b,sizeof a);

#define inf 0x3f3f3f3f

using namespace std;

typedef long long ll;

const int maxn=200010;

int n,m;

int a[maxn], rs[maxn];

int lowbit(int x)

void update_sum(int x,int val)

}int query_sum(int x)

return res;

}int main()

char ch[5];

int l,r;

while(m--)

}return 0;

}

四、解析(附圖):

1、主要理解了「x+=lowbit(x)」 和 「x-=lowbit(x)」 和 「x--」(有些**中是 "r--") 這三個理解了是在做什麼即可,直接看圖。

「x+=lowbit(x)」:訪問直系父結點,比如:c[1]點開始,則會訪問:c[1] --> c[2] --> c[4] --> c[8]。

「x-=lowbit(x)」:訪問同一輩的左兄弟結點,比如:c[7]點開始,則會訪問:c[7] --> c[6] --> c[4] --> end。

「x--」:訪問左子結點,比如:c[6]點開始,則會訪問:c[6] --> c[5]。

ps:如果有時題目需要,還需要繼續訪問的話,需要 c[x-1] 操作,比如:訪問到 c[4] 結束時,想繼續訪問,則需要下個從 c[3] 開始,依此類推。

2、至於利用二進位制為什麼這麼巧妙可以得出第1點這個規律,其實我也不知道,數學就是這麼神奇~

ACM 模板 樹狀陣列

樹狀陣列作為一種資料結構,很廣泛的運用到關於統計的問題中,樹狀陣列通過類似數的結構每一位都記錄的是從前面到這個點所有的和,要修改起來也很方便。在 上樹狀陣列也很簡單,就是核心的三個函式。const int maxn 1002 一維樹狀陣列 int c maxn int lowbit int x vo...

樹狀陣列模板

假設有一列數 1 i n 支援如下兩種操作 1.將ai的值加d。2.輸出ai ai 1 aj 1 i j n 樹狀陣列是一種特殊的資料結構,這種資料結構的時空複雜度和線段樹相似,但是它的係數要小得多 hdu 1166 敵兵布陣 題目 a國在海岸線沿直線布置了n個工兵營地。由於採取了某種先進的監測手段...

樹狀陣列模板

已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數數加上x 2.求出某乙個數的和 這種水水的樹狀陣列,博主就不做介紹,直接上 希望大家可以多多捧場!include include include include include include include include include ...