(一維 二維)樹狀陣列模板

2021-09-05 07:08:02 字數 1505 閱讀 3871

一維或二維的區間修改都用到了差分的思想

詳細講解

1.單點修改+區間查詢

int lowbit(int x)

void add(int x,int v) //給x位置加上v

}int ask(int x) //求字首和

return ans;

}int range_ask(int l,int r)

2.區間修改+單點查詢

int lowbit(int x)

void add(int x,int v)

}void range_add(int l,int r,int v) //給區間[l,r]加上v

int ask(int x)

return ans;

}

3.區間修改+區間查詢

//這裡要用到兩個樹狀陣列

int lowbit(int x)

void add(int x,int v)

}void range_add(int l,int r,int v) //給區間[l,r]加上v

int ask(int x)

int range_ask(int l,int r)

1.單點修改+區間查詢

int lowbit(int x)

void add(int x,int y,int v) //修改

int sum(int x,int y) //求和

int ask(int x1,int y1,int x2,int y2) //求子矩陣和

2.區間修改+單點查詢

int lowbit(int x)

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

void range_add(int x1,int y1,int x2,int y2,int z)

int ask(int x,int y)

3.區間修改+區間查詢

這裡要用到四個樹狀陣列

int c1[maxn][maxn],c2[maxn][maxn],c3[maxn][maxn],c4[maxn][maxn];

int n,m;

int lowbit(int x)

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

}void range_add(int x1,int y1,int x2,int y2,int z)

int ask(int x,int y)

int range_ask(int x1,int y1,int x2,int y2)

二維樹狀陣列模板

二維樹狀陣列就是求矩陣和。一維樹狀陣列中 c 1 a1,c 2 a1 a2,c 3 a3 記 b 1 這是第一行的一維樹狀陣列 b 2 這是第二行的一維樹狀陣列 則c 1 1 a11,c 1 2 a11 a12,c 1 3 a13 模擬一維,可知c i 就是第 i 行的一維樹狀陣列。則c 1 1 a...

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

樹狀陣列模板 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...

一維樹狀陣列和二維樹狀陣列

hdu1166敵兵布陣 樹狀陣列適用於頻繁對陣列元素進行修改,同時又要查詢陣列內任一區間元素之和。聽說線段樹也可以做,線段樹的作用 點修改,區間查詢,區間修改。include include include include using namespace std int a 50005 int c ...