計蒜客 天上的星星(字首和)

2021-08-17 19:06:21 字數 1263 閱讀 6653

天上星星

在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。

蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 nn 顆星星,他能知道每一顆星星的座標和亮度。

現在,蒜頭君問自己 qq 次,每次他問自己每個矩形區域的星星的亮度和是多少(包含邊界上的星星)。

輸入格式

第一行輸入乙個整數 n(1≤n≤50000) 表示星星的數量。

接下裡 nn 行,每行輸入三個整數 x,y,w(0≤x,y,w≤2000),表示在座標 (x,y)(x,y) 有一顆亮度為 ww 的星星。注意乙個點可能有多個星星。

接下來一行輸入乙個整數 q(1≤q≤50000),表示查詢的次數。

接下來 qq 行,每行輸入四個整數 x1,y1,x2,y2,其中(x1,y1) 表示查詢的矩形的左下角的座標,(x2,y2) 表示查詢的矩形的右上角的座標,0≤x1≤x2≤2000,0≤y1≤y2≤2000。

輸出格式

對於每一次查詢,輸出一行乙個整數,表示查詢的 矩形區域內的星星的亮度總和。

樣例輸入

5 0 6

7 9 7

8 6 13

9 7 1

3 0 19

0 8 7 9

0 0 7 10

2 7 10 9

5 4 7 5

樣例輸出

思路:標準的字首和問題,只需要注意一下邊界的值不要被去掉就好~

**講解:

#include

#include

#include

using

namespace

std;

int mp[2010][2010],s[2010][2010];

int main()

for(int i = 1; i <= 2001; i++)

for(int j = 1; j <= 2001; j++)

s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + mp[i][j];

//字首和求矩陣的公式,不懂為什麼,可以找個部落格看一下

int k;

cin >> k;

int ans;

for(int i = 0; i < k; i++)

return

0;}

字首和是真滴快,矩陣查詢時間複雜度居然只需要o(n^2 +m),連樹狀陣列和線段樹都在這塊無法望其項背。。。

計蒜客 天上的星星 字首和

在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 nn 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 qq 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 輸入格式 第一行輸入乙個整數 ...

計蒜客 天上的星星

傳送門 在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 n n 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 q 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 第一行輸入乙個整數 n...

計蒜客天上的星星

在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 n n 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 q q 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 第一行輸入乙個整數 n 1...