您的位置:首页 > 其它

计蒜客--天上的星星

2018-03-10 16:06 260 查看
题目链接
这道题看似是线段树,但是其实不用线段树就可以做
sum表示从(0,0)到(i,j)的所有亮度和,然后求区间的亮度,可以用容斥原理进行计算#include<bits/stdc++.h>
using namespace std;
int sum[2002][2002];
int main()
{
int n;
scanf("%d",&n);
memset(sum,0,sizeof(sum));
while(n--)
{
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
sum[x+1][y+1]+=w;
}
for(int i=1; i<=2001; i++)
{
for(int j=1; j<=2001; j++)
{
sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
}
}
int q;
int x1,y1,x2,y2;
scanf("%d",&q);
while(q--)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
printf("%d\n",sum[x2+1][y2+1]-sum[x1][y2+1]-sum[x2+1][y1]+sum[x1][y1]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息