二維,三維樹狀陣列模板

2021-06-23 00:04:30 字數 688 閱讀 2545

二維樹狀陣列,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.區間修改 單點查詢...