BZOJ3132 上帝造題的七分鐘 樹狀陣列

2022-05-20 07:13:36 字數 1783 閱讀 6525

time limit: 20 sec  memory limit: 128 mb

[submit][status][discuss]

「第一分鐘,x說,要有矩陣,於是便有了乙個裡面寫滿了0的n×m矩陣。

第二分鐘,l說,要能修改,於是便有了將左上角為(a,b),右下角為(c,d)的乙個矩形區域內的全部數字加上乙個值的操作。

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

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

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

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

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

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

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

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

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

l a b c d delta —— 代表將(a,b),(c,d)為頂點的矩形區域內的所有數字加上delta。

k a b c d   —— 代表求(a,b),(c,d)為頂點的矩形區域內所有數字的和。

請注意,k為小寫。

對於每個操作,輸出乙個答案。

x 4 4

l 1 1 3 3 2

l 2 2 4 4 1

k 2 2 3 3

121<=n,m<=2048, |delta|<=500, 運算元<=200000.

維護乙個資料結構,支援矩陣加減乙個數,矩陣求和。

我們運用二維樹狀陣列。

直接維護顯然不行,我們令 a[i][j] 表示 (i,j) 到 (n,m) 的矩陣加的東西,然後推一下式子:

那麼再維護乙個 a[i][j]*i, a[i][j]*j, a[i][j]*i*j,即可。

1 #include2 #include  

3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9 typedef long

long

s64;

1011

const

int one = 2050;12

13int

n,m;

14int

x_1,y_1,x_2,y_2,z;

15char c[3

];16

17int

get()

1827

28struct

bit29

3233

void add(int x,int y,int

z)34

3940

int query(int x,int

y)41

4849

}a,ai,aj,aij;

5051

void add(int x,int y,int

z)52

5556

int get(int x,int

y)57

6061

intmain()

6272

else

7376

}77 }

view code

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說,要能查詢,於是便有了求給定矩形區域內的全部數字和的操...