BZOJ 3132 上帝造題的七分鐘 (樹狀陣列)

2021-08-21 17:24:20 字數 1988 閱讀 9452

description

「第一分鐘,x說,要有矩陣,於是便有了乙個裡面寫滿了

0 0

的n∗m' role="presentation">n∗m

n∗m矩陣。

第二分鐘,l說,要能修改,於是便有了將左上角為(a

,b) (a,

b)

,右下角為(c

,d) (c,

d)

的乙個矩形區域內的全部數字加上乙個值的操作。

第三分鐘,k說,要能查詢,於是便有了求給定矩形區域內的全部數字和的操作。

第四分鐘,彩虹喵說,要基於二叉樹的資料結構,於是便有了資料範圍。

第五分鐘,和雪說,要有耐心,於是便有了時間限制。

第六分鐘,吃鋼琴男說,要省點事,於是便有了保證運算過程中及最終結果均不超過32位有符號整數型別的表示範圍的限制。

第七分鐘,這道題終於造完了,然而,造題的神牛們再也不想寫這道題的程式了。」

——《上帝造裸題的七分鐘》

所以這個神聖的任務就交給你了

input

輸入資料的第一行為x n m,代表矩陣大小為n∗

m n∗m

從輸入資料的第二行開始到檔案尾的每一行會出現以下兩種操作:

l a b c d delta—— 代表將(a

,b),

(c,d

) (a,

b),(

c,d)

為頂點的矩形區域內的所有數字加上de

lta del

ta

k a b c d—— 代表求(a

,b),

(c,d

) (a,

b),(

c,d)

為頂點的矩形區域內所有數字的和

請注意,k為小寫

output

針對每個k操作,在單獨的一行輸出答案。

sample input

x 4 4

l 1 1 3 3 2

l 2 2 4 4 1

k 2 2 3 3

sample output

12data size & hint

對於100%的資料,1≤

n≤2048,1

≤m≤2048,1

≤abs

(del

ta)≤

500 1≤n

≤2048,1

≤m

≤2048,1

≤abs

(del

ta)≤

500,操作不超過200000個,保證運算過程中及最終結果均不超過32位帶符號整數型別的表示範圍

裸的樹狀陣列應用

二維區間修改區間查詢樹狀陣列

詳解請戳這

#include 

using

namespace

std;

typedef

long

long ll;

int n,m;

int a[4][2050][2050];

int lowbit(int x)

void insert(int x,int y,ll add)

newx+=lowbit(newx);

}}int query(int x,int y)

newx-=lowbit(newx);

}return ans;

}int read()

while(_ch >= '0' && _ch <= '9')

return _ans*_flag;

}int main()

else

}return

0;}

bzoj 3132 上帝造題七分鐘

bit區間增加區間求和,只不過是二維的.比一維麻煩多了。這種題還是得自己推啊,強記果斷會暈掉。公式大概是 dij x i 1 y j 1 其中dij表示在 i,j 點上累計的增量,展開後得到 dij x 1 y 1 dij i y 1 dij j x 1 dij i j 然後x 1和y 1是在具體詢...

BZOJ3132 上帝造題的七分鐘

description 第一分鐘,x說,要有矩陣,於是便有了乙個裡面寫滿了0的n m矩陣。第二分鐘,l說,要能修改,於是便有了將左上角為 a,b 右下角為 c,d 的乙個矩形區域內的全部數字加上乙個值的操作。第三分鐘,k說,要能查詢,於是便有了求給定矩形區域內的全部數字和的操作。第四分鐘,彩虹喵說,...

BZOJ 3132 上帝造題的七分鐘

bzoj 3132 上帝造題的七分鐘 樹狀陣列 第一分鐘,x說,要有矩陣,於是便有了乙個裡面寫滿了0的n m矩陣。第二分鐘,l說,要能修改,於是便有了將左上角為 a,b 右下角為 c,d 的乙個矩形區域內的全部數字加上乙個值的操作。第三分鐘,k說,要能查詢,於是便有了求給定矩形區域內的全部數字和的操...