樹狀陣列 二維

2021-08-25 11:20:07 字數 1320 閱讀 3836

首先初始陣列還是a陣列,二維的

搞乙個b陣列,也是二維,b[i][ ]就是a陣列第i行的一維樹狀陣列

b[2][1]=a[2][1];

b[2][2]=a[2][1]+a[2][2];

b[2][3]=a[2][3];

最後我們來搞乙個c陣列,當然它還是二維的hhh

c[1][ ]就是第一行的樹狀陣列,c[2][ ]是第一行加第二行,c[3][ ]是第三行,c[4][ ]就是前四行之和......

c[i][j]=i管理的樹狀陣列中j項的和

看懂了麼?其實就是在b陣列的基礎上,給b數組建了乙個樹狀陣列

a陣列(初始陣列)21

3415

4352

54b陣列(a陣列的樹狀陣列)23

31016

41357

516c陣列(b陣列的樹狀陣列)23

31039

72357

516模擬一下單點修改

假如給a[1][2]+2;

a陣列(初始陣列)23

3415

4352

54b陣列(a陣列的樹狀陣列)25

31216

41357

516c陣列(b陣列的樹狀陣列)25

312311

72557

516這就是二維樹狀數

組的修改過程,我們發現,c陣列只有c[1][2],c[1][4],c[2][2],c[2][4]改變了,其實就是……怎麼說呢,就是c陣列的橫座標和縱座標分別作為乙個樹狀陣列來看……(越繞越亂,自行理解)

如果沒看懂,那就直接上**吧

(其實我現在稍微有點懵,寫完**應該就懂了)

​#includeusing namespace std;

int a[10100][10100],b[10100][10100],c[10100][10100],n,m,k;

int lowbit(int x)

void modifyb(int x,int y,int z)

void modifyc(int x,int y,int z)

void modify(int x,int y,int z)

int query(int x,int y)

int main()

if (p==2)

}return 0;

}​

那麼樹狀陣列就徹底告一段落了 

至此,已經解決了:樹狀陣列單點修改區間查詢,樹狀陣列區間修改單點查詢,樹狀陣列區間修改區間查詢,二維樹狀陣列

二維樹狀陣列

什麼是二維樹狀陣列 二維樹狀陣列 單點修改,區間查詢 include const int maxn 4096 5 typedef long long ll ll c maxn maxn int n,m int lowbit int x void modify int x,int y,int z ll...

樹狀陣列 二維樹狀陣列模板

樹狀陣列模板 int lowbit int x int add int x,int val int que int x 模板題 題解 include include include using namespace std int c 300000 rank 300000 int n int lowb...

樹狀陣列及二維樹狀陣列

一直以為樹狀陣列能用線段樹水過去,直到我今天碰上了樹狀陣列模板題。然後就是開始認真的學習樹狀陣列,突然發現怎麼這麼好寫qwqqqq。部分 一.樹狀陣列 樹狀陣列是一種資料結構,核心思想是利用二進位制的補碼思想。首先就是樹狀陣列的結構圖 然後我們對他進行變形 是不是感覺更好理解了呢?然後我們對其進行標...