二維字首和顧名思義,用乙個點去代表乙個矩形,查詢的時間是o(1)
sum[ i ][ j ]表示(0,0)到(i,j)的字首和。
先給出遞推公式sum[ i ][ j ] = map[ i ][ j ]+sum[ i-1 ][ j ]+sum[ i ][ j-1 ]-sum[ i-1 ][ j-1 ]
看圖就知道了,sum[i][j] 表示的是藍區域紅區域加黃區域再加右下角那個
sum[i-1][j] 表示的是藍區域加黃區域,sum[i][j-1] 表示的是藍區域加紅區域
因為藍區域重複加了所以要減掉他。
題目描述
一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。
現在地圖上有n(n ≤ 10000)個目標,用整數xi,yi(其值在[0,5000])表示目標在地圖上的位置,每個目標都有乙個價值。
雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其爆破範圍,即那個邊長為r的正方形的邊必須和x,y軸平行。
若目標位於爆破正方形的邊上,該目標將不會被摧毀。
輸入描述:
輸入檔案的第一行為正整數n和正整數r,接下來的n行每行有3個正整數,分別表示 xi,yi ,vi 。
輸出描述:
輸出檔案僅有乙個正整數,表示一顆炸彈最多能炸掉地圖上總價值為多少的目標(結果不會超過32767)。
輸入
2 10 0 1
1 1 1
輸出
1
#include
#define ll long long
using
namespace std;
const
int maxn =
5e3+5;
int a[maxn]
[maxn]
;int
main()
for(
int i =
1; i < maxn;
++i)
for(
int j =
1; j < maxn;
++j)
a[i]
[j]+
= a[i -1]
[j]+ a[i]
[j -1]
- a[i -1]
[j -1]
;//求字首和把對應矩形的面積求出來
int ans =0;
for(
int i = r; i < maxn;
++i)
for(
int j = r; j < maxn;
++j)
printf
("%d\n"
, ans);}
return0;
}
生活不會怠慢乙個熱愛它的人,上緊你的發條,滴滴答答的轉起來就好了,你聽,小皮球,香蕉梨,馬蘭開花二十一,各有各的精彩。 雷射炸彈 二維字首和
或者 一種新型的雷射炸彈,可以摧毀乙個邊長為 r 的正方形內的所有的目標。現在地圖上有 n個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其 範圍,即那個邊長為 rr的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊...
雷射炸彈 二維字首和
一種新型的雷射炸彈,可以摧毀乙個邊長為 r 的正方形內的所有的目標。現在地圖上有 n 個目標,用整數xi,yi表示目標在地圖上的位置,每個目標都有乙個價值wi。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其 範圍,即那個邊長為 r 的正方形的邊必須和x,y軸平行。若目標位於爆破正方形的邊上,...
雷射炸彈 UPC二維字首和
題目描述 一種新型的雷射炸彈,可以摧毀乙個邊長為r的正方形內的所有的目標。現在地圖上有n n 10000 個目標,用整數xi,yi 0 xi,yi 5000 表示目標在地圖上的位置,每個目標都有乙個價值0 vi 100。雷射炸彈的投放是通過衛星定位的,但其有乙個缺點,就是其爆破範圍,即那個邊長為r的...