題目大意:有很多方格,每個方格對應的座標為(i,j),剛開始時每個格仔裡有1本書,然後讓你統計一片區域有多少本書,還可以增加書和減少,移動書。
解題思路:
和一維樹狀陣列沒撒子區別。一維擴充套件到二維而已。
需要注意的兩點是:1.x,y座標從0開始,所以儲存更新的時候座標分別加1進行更新。因為0座標會進入死迴圈。
2.區間求和的時候bit陣列裡面存的是它整個左下角的和,所以還要進行操作(即下面的find函式)讓它表示的此位置的數目。
1 #include 2 #include 3 #include 4 #include 5using
namespace
std;67
const
int maxn=1005;8
intbit[maxn][maxn];910
int lowbit(int
x)11
1415
void add(int x, int y, int
val)
1625 x+=lowbit(x);26}
27}2829
int sum(int x, int
y)30
40 x-=lowbit(x);41}
42return
ans;43}
4445
int find(int x,int
y)46
4950
intmain()
5173
else
if(ch[0]=='m'
)7480else
8188}89
}90return0;
91 }
hdu1892二維樹狀陣列
樹狀陣列一般的操作只有 1.單點更新,區間查詢 2.區間更新,單點查詢 其中區間更新和單點更新不能同時寫在一起,會對樹狀陣列的結構早成影響。這題 wa的情況主要是沒有考慮到 x1,y1 可能大於 x2,y2 訓練 訓練題鏈結 include include include include inclu...
hdu 1892 樹狀陣列,二維
注意點 輸入時x1,x2,y1,y2的大小判斷,x,y從0開始,書拿光時的判斷 第一題二維,還是蠻神奇的。include include includeusing namespace std define m 1002 int tree m 1 m 1 int lowbit int x void u...
二維樹狀陣列 hdu1892
二維樹狀陣列 hdu1892 二維書架上原本有1本書 t組樣例,四種操作,search,add,del,move 書架上的書小於del的值時,取完該格仔的書即可 查詢操作用二維的容斥推 由於格仔取值可以等於0,故下標都 1 include include include include includ...