一維或二維的區間修改都用到了差分的思想
詳細講解
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 ...