二維樹狀陣列 單點修改,區間查詢(模板)

2021-10-03 02:28:23 字數 1424 閱讀 6425

給你乙個n*m的鄰接矩陣,完成以下兩個操作。

"1 x y k":表示元素 ax,y 自增 k;

"2 a b c d":表示詢問左上角為 (a,b),右下角為 (c,d) 的子矩陣內所有數的和。

input

輸入的第一行有兩個正整數 n,m;

接下來若干行,每行乙個操作,直到檔案結束。

output

對於每個 "2" 操作,輸出乙個整數,表示對於這個操作的回答。
example

input22

1113

1224

2112

2output

7

note

1≤n,m≤2^12

,1≤x,a,c≤n,

1≤y,b,d≤m,

|k|≤105,保證運算元目不超過 3×10

^5,且詢問的子矩陣存在。

基本操作和一維樹狀陣列差不多,求和的時候注意下二維字首和的求法就可以。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

5e3+5;

const

int mod=

1e9+7;

const

int inf=

0x7fffffff

;const ll llinf=

0x7fffffffffffffff

;const

double eps=

1e-10

;#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

#define pb push_back

#define pii pair

#define pll pair

#define debug cout<<"debug"<#define ls p<<1

#define rs p<<1|1

#define int long long

int c[n]

[n];

intlowbit

(int x)

int n,m;

void

add(

int x,

int y,

int k)}}

intsum

(int x,

int y)

}return s;

}signed

main()

else

}}

樹狀陣列 單點修改區間查詢

樹狀陣列,時間複雜度o mlogn 明顯優於暴力列舉以及字首和,主要用於單點修改區間查詢 當然還有區間修改單點查詢 如果一道題中只有區間查詢,那麼建議使用字首和維護 思想直接理解不好理解,借助資料 a陣列下標12 3456 78數值2 5632 714以上是我們要儲存的a陣列,就是原資料 b陣列下標...

樹狀陣列(單點修改區間查詢)

lowbit是用來取出二進位制中最低位數的1所代表的二進位制的值。只需要記下 就行了 int lowbit int x 將乙個樹的最子節點修改,則其父節點也需要更改,父父節點也需要修改。x x lowbit x 就是用來取出其父節點的。void add int x,int k 能查詢原陣列的字首和,...

樹狀陣列 單點修改,區間查詢

本人水平有限,題解不到為處,請多多諒解 本蒟蒻謝謝大家 題目 time limit 10 sec memory limit 512 mb submit 231 solved 78 submit status web board 給定數列 a 1 a 2 a n 你需要依次進行 q個操作,操作有兩類 ...