二維樹狀陣列更塊查點

2021-09-19 23:43:52 字數 1012 閱讀 2612

在此不給予證明,但是證明很簡單。

二維樹狀數組成塊更新,查定點的值。

我們以一維的推廣,我們可不可以成塊更新轉化為修改一些點的值,然後求點的值轉化統計一塊的和?

我們可以構造乙個m矩陣,讓m矩陣初始化為0,我們可以讓座標(x,y)的值等於以(1,1)和(x,y)組成的m子矩陣的元素之和(你看看,這個條件在剛開始的時候是成立的),我們更新以(x1,y1)和(x2,y2)組成的矩陣的值的時候,我們只需在m矩陣中插入(x1,y1)(x1,y2+1)(x2+1,y1)(x2+1,y2+1)的值。

比如我們將以(x1,y1)和(x2,y2)組成的矩陣的元素都加上val。那麼我們將(x1,y1)+val,(x1,y2+1)-val,(x2+1,y1)-val,(x2+1,y2+1)+val即可。

題意:對乙個n∗m的矩陣進行一些操作和查詢,操作:成塊修改。查詢:求某個元素的值,

#include

using

namespace std;

int bt[

1100][

1100];

int maxn,maxm;

//矩陣的行和列

intlowbit

(int k)

void

modify

(int x,

int y,

int val)

}int

getsum

(int x,

int y)

//等於其左上角矩陣的和

return ans;

}void

update

(int x1,

int y1,

int x2,

int y2,

int val)

//更新差值矩陣

intmain()

cin>>q;

//查詢操作的次數

while

(q--

)}

樹狀陣列 二維

首先初始陣列還是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 是第三行...

二維樹狀陣列

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