这道题看似是线段树,但是其实不用线段树就可以做
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;
}