计蒜客--天上的星星
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;
}
这道题看似是线段树,但是其实不用线段树就可以做
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;
}
相关文章推荐
- 计蒜客--天上的星星
- 计蒜客天上的星星
- 计蒜客——2018蓝桥杯模拟赛(一)之天上的星星
- 计蒜客 - 天上的星星(前缀和)
- 计蒜客-天上的星星【前缀和+容斥】
- 计蒜客-天上的星星(二维前缀和)
- 2018蓝桥模拟赛 天上的星星
- 【计蒜客-天上的星星】
- 天上的星星
- 2018蓝桥模拟赛·天上的星星 暴力|二维树状数组
- C#命名规则和开发习惯(引用于天上的星星亮晶晶(zj492)的blog)
- [导入]天上的星星不说话,地上的娃娃想妈妈
- 老公,我要天上的星星...纯娱乐笑话(zz)
- 天上的星星
- 天上的星星
- 2018 蓝桥杯省赛 B 组模拟赛(一)-天上的星星
- 2018 蓝桥杯省赛 B 组模拟赛(一)I. 天上的星星
- 【计蒜客】天上的星星
- FLASH做出夜空中星星眨的效果
- Unity教程之-制作闪亮的星星Star(五):源码