首先初始陣列還是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。部分 一.樹狀陣列 樹狀陣列是一種資料結構,核心思想是利用二進位制的補碼思想。首先就是樹狀陣列的結構圖 然後我們對他進行變形 是不是感覺更好理解了呢?然後我們對其進行標...