給你乙個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個操作,操作有兩類 ...