前缀和-天上的星星
題目:
在一個(gè)星光摧殘的夜晚,蒜頭君一顆一顆的數(shù)這天上的星星。
蒜頭君給在天上巧妙的畫了一個(gè)直角坐標(biāo)系,讓所有的星星都分布在第一象。天上有?n?顆星星,他能知道每一顆星星的坐標(biāo)和亮度。
現(xiàn)在,蒜頭君問自己?q?次,每次他問自己每個(gè)矩形區(qū)域的星星的亮度和是多少(包含邊界上的星星)。
輸入格式
第一行輸入一個(gè)整數(shù)?n(1≤n≤50000)?表示星星的數(shù)量。
接下里?nn?行,每行輸入三個(gè)整數(shù)?x,y,w。x,y,w(0≤x,y,w≤2000),表示在坐標(biāo)?(x,y)?有一顆亮度為?w?的星星。注意一個(gè)點(diǎn)可能有多個(gè)星星。
接下來一行輸入一個(gè)整數(shù)?q(1≤q≤50000),表示查詢的次數(shù)。
接下來?q?行,每行輸入四個(gè)整數(shù)?x1, y1, x2, y2,其中(x1?,y1?)?表示查詢的矩形的左下角的坐標(biāo),(x2?,y2?)?表示查詢的矩形的右上角的坐標(biāo),0≤x1?≤x2?≤2000,0≤y1?≤y2?≤2000。
輸出格式
對于每一次查詢,輸出一行一個(gè)整數(shù),表示查詢的矩形區(qū)域內(nèi)的星星的亮度總和。
樣例輸入復(fù)制
5 5 0 6 7 9 7 8 6 13 9 7 1 3 0 19 4 0 8 7 9 0 0 7 10 2 7 10 9 5 4 7 5樣例輸出復(fù)制
7 32 8 0題目來源:https://nanti.jisuanke.com/t/A1603
前綴和:https://blog.csdn.net/k_r_forever/article/details/81775899
?
代碼:
#include<cstdio> #include<iostream> using namespace std; int a[2005][2005]; int main() {int n,x,y,w;int q,x1,x2,y1,y2;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d%d%d",&x,&y,&w);a[x+1][y+1]+=w; //因?yàn)樾切强梢灾貜?fù),即亮度可以疊加,考慮到邊界問題,所以對坐標(biāo)+1 }for(int i=0;i<2005;i++){for(int j=1;j<2005;j++){a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];}}scanf("%d",&q);for(int i=0;i<q;i++){scanf("%d%d%d%d",&x1,&y1,&x2,&y2);++x1;++x2;++y1;++y2;//考慮邊界,坐標(biāo)依次+1int ans=a[x2][y2]-a[x2][y1-1]-a[x1-1][y2]+a[x1-1][y1-1];printf("%d\n",ans);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/LJHAHA/p/10641230.html
總結(jié)
- 上一篇: docker+httpd的安装
- 下一篇: Java学习笔记-网络编程