天上星星
在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。
蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 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
樣例輸出
思路:標準的字首和問題,只需要注意一下邊界的值不要被去掉就好~
**講解:
字首和是真滴快,矩陣查詢時間複雜度居然只需要o(n^2 +m),連樹狀陣列和線段樹都在這塊無法望其項背。。。#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;}
計蒜客 天上的星星 字首和
在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 nn 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 qq 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 輸入格式 第一行輸入乙個整數 ...
計蒜客 天上的星星
傳送門 在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 n n 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 q 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 第一行輸入乙個整數 n...
計蒜客天上的星星
在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 n n 顆星星,他能知道每一顆星星的座標和亮度。現在,蒜頭君問自己 q q 次,每次他問自己每個矩形區域的星星的亮度和是多少 包含邊界上的星星 第一行輸入乙個整數 n 1...