二維樹狀陣列,update(x,y)是更新(x,y),然後維護(x,y)右下角的矩陣,sum(x,y)是求(1,1) 到 (x ,y)這個矩陣內所有元素的和。當然也可以用來求任意矩陣的值。
例如求矩陣(x1,y1) 到 (x2,y2)的值,那麼直接sum (x2, y2) – sum(x1 – 1 ,y2) – sum(x2 ,y1 - 1) + sum (x1 – 1 ,y1 - 1) 即可。
int lowbit(int x )
void update(int x ,int y ,int num)
int sum(int x ,int y )
三維樹狀陣列:
int lowbit(int x)
void update(int x,int y,int z,int num)
int sum(int x,int y,int z)
求空間(x1,y1,z1)到(x2,y2,z2)的值:
w=sum(x2,y2,z2)-sum(x2,y1-1,z2)-sum(x2,y2,z1-1)-sum(x1-1,y2,z2);
w+=sum(x2,y1-1,z1-1)+sum(x1-1,y2,z1-1)+sum(x1-1,y1-1,z2);
w-=sum(x1-1,y1-1,z1-1);
二維樹狀陣列模板
二維樹狀陣列就是求矩陣和。一維樹狀陣列中 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...
(一維 二維)樹狀陣列模板
一維或二維的區間修改都用到了差分的思想 詳細講解 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.區間修改 單點查詢...