題目鏈結
在乙個星光摧殘的夜晚,蒜頭君一顆一顆的數這天上的星星。
蒜頭君給在天上巧妙的畫了乙個直角座標系,讓所有的星星都分布在第一象。天上有 nn 顆星星,他能知道每一顆星星的座標和亮度。
現在,蒜頭君問自己 qq 次,每次他問自己每個矩形區域的星星的亮度和是多少(包含邊界上的星星)。
第一行輸入乙個整數 n(1 \le n \le 50000)n(1≤n≤50000) 表示星星的數量。
接下裡 nn 行,每行輸入三個整數 x,y,w(0 \le x, y, w\le 2000)x,y,w(0≤x,y,w≤2000),表示在座標 (x,y)(x,y) 有一顆亮度為 ww 的星星。注意乙個點可能有多個星星。
接下來一行輸入乙個整數 q(1 \le q \le 50000)q(1≤q≤50000),表示查詢的次數。
接下來 qq 行,每行輸入四個整數 x_1, y_1, x_2, y_2x1,y1,x2,y2,其中 (x_1, y_1)(x1,y1) 表示查詢的矩形的左下角的座標,(x_2, y_2)(x2,y2) 表示查詢的矩形的右上角的座標,0 \le x_1 \le x_2 \le 20000≤x1≤x2≤2000,0 \le y_1 \le y_2 \le 20000≤y1≤y2≤2000。
對於每一次查詢,輸出一行乙個整數,表示查詢的矩形區域內的星星的亮度總和。
樣例輸入複製
5
5 0 6
7 9 7
8 6 13
9 7 1
3 0 19
40 8 7 9
0 0 7 10
2 7 10 9
5 4 7 5
樣例輸出複製
7328
0
設陣列mp[x][y]代表以(0,0)為矩形的左下角的座標,(x,y)矩形的右下角的座標圍成的矩陣內的星星的亮度的總和。
設陣列haxi[x][y]代表座標為(x,y)上的所有星星的亮度和(因為在乙個座標上會有多個星星)
那麼遞推關係式應該為mp[i][j]=mp[i-1][j]+mp[i][j-1]-mp[i-1][j-1]+haxi[i][j];
在詢問中,若求某個矩陣的星星亮度總和,遞推關係就該為mp[x2][y2]-(mp[x1-1][y2]+mp[x2][y1-1]-mp[x1-1][y1-1]);
有乙個小矩陣會被減去兩次,所以最後再加一次。
考慮到**的實現,把資料的座標整體+1,避免遞推式**現負數下標。
#include#include#includeusing namespace std;
typedef long long int ll;
const int maxn(2000);
const int inf(0x3f3f3f3f);
const int mod(1e9+7);
ll mp[maxn+50][maxn+50];
int haxi[maxn+50][maxn+50];
int main()
for(int i=1;i<=2001;i++)
}int q;
scanf("%d",&q);
while(q--)
}
2018 藍橋杯省賽 B 組模擬賽(一)
給你乙個序列,請你在其中求出一段最長嚴格上公升的部分,它不一定要連續。include includeusing namespace std int f 10000 b 10000 int lis int n res max res,f i return res 1 int main printf d...
2019 藍橋杯省賽 B 組模擬賽(一)
d.結果填空 馬的管轄 e.填空 lis f.程式設計 找質數 思路 因為時間複雜度的問題,o n n 的時間複雜度可能會超時,可以選擇的篩選素數的方法有埃氏篩法o n logn 尤拉篩法,這裡選的是尤拉篩法o n 直接遍歷找兩個素數相加等於n 因為要求字典樹最小,所以不會超時 ac include...
2018 藍橋杯省賽 B 組模擬賽(一) 數列求值
對於乙個含有 n 2n 2 個元素的數列,a 0,a 1,cdots a na0 a1 a n 滿足這樣的遞迴公式 displaystyle a i frac a c i 1 le i le nai 2a i 1 ai 1 ci 1 i n 現在我們知道 a 0,a a0 an 1 和 c 1,c ...