首页 > 其他分享 >计蒜客 - 天上的星星 (二维前缀和)

计蒜客 - 天上的星星 (二维前缀和)

时间:2023-02-17 17:33:45浏览次数:38  
标签:星星 x1 前缀 int x2 二维 y1 y2 计蒜客


在一个星光摧残的夜晚,蒜头君一颗一颗的数这天上的星星。

蒜头君给在天上巧妙的画了一个直角坐标系,让所有的星星都分布在第一象。天上有 nn 颗星星,他能知道每一颗星星的坐标和亮度。

现在,蒜头君问自己 qq 次,每次他问自己每个矩形区域的星星的亮度和是多少(包含边界上的星星)。

计蒜客 - 天上的星星 (二维前缀和)_ci

输入格式

第一行输入一个整数 n(1≤n≤50000) 表示星星的数量。

接下里 n 行,每行输入三个整数 x,y,w(0≤x,y,w≤2000),表示在坐标 (x,y) 有一颗亮度为 ww 的星星。注意一个点可能有多个星星。

接下来一行输入一个整数 q(1≤q≤50000),表示查询的次数。

接下来 qq 行,每行输入四个整数 x1,y1,x2,y2,其中 (x1,y1) 表示查询的矩形的左下角的坐标(x2,y2) 表示查询的矩形的右上角的坐标,20000≤x1≤x2≤2000, 20000≤y1≤y2≤2000。

输出格式

对于每一次查询,输出一行一个整数,表示查询的矩形区域内的星星的亮度总和。

样例输入复制


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


样例输出复制


7 32 8 0


题解:  裸的二维前缀和 (求蓝色区域), 处理处理边界, 下图中的粉色粗线最后查询时不能减去这条线上的 . 

计蒜客 - 天上的星星 (二维前缀和)_i++_02

#include <iostream>
#include <cstdio>
using namespace std ;
const int MAX = 5010 ;
int a[MAX][MAX] ;
int main(){
int n ;
cin >> n ;
int xb = 0 ; //
int yb = 0 ;
for(int i = 1 ;i<=n ;i++ ){
int x ,y ,w ;
cin >>x >>y >>w ;
x++ ;
y++ ;
xb = max(xb,x) ;
yb = max(yb,y);
a[x][y]+=w ; // 一个点可能有多个星星
}
for(int i = 1 ; i<=2001 ; i++ ) {
for(int j = 1 ;j<=2001 ; j++ ){
a[i][j] +=a[i-1][j] + a[i][j-1] -a[i-1][j-1] ;
}
}

int q ;
cin >>q;
while(q--){
int x1,y1 , x2,y2 ;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1++ ;
y1++ ;
x2++ ;
y2++ ;
int ans = a[x2][y2]-a[x1-1][y2]-a[x2][y1-1]+a[x1-1][y1-1] ;
printf("%d\n",ans);
}
return 0 ;
}

 

标签:星星,x1,前缀,int,x2,二维,y1,y2,计蒜客
From: https://blog.51cto.com/u_15970235/6064431

相关文章

  • 记TCP触发海康相机识别二维码时的问题。
    背景:在一个项目中用TCP通讯的方式触发海康相机进行二维码识别并回传二维码信息。问题:在测试过程中发现经常会有读取到的信息是上一个产品的二维码信息。原因分析:在TCP通......
  • java二维数组
    1.查找1)顺序查找SeqSearch.java2)二分查找【二分法,放在算法讲解】2.顺序查找有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判......
  • C语言填空:求二维数组中最大值,并输出所有最大值对应的行号与列号
    #include<stdio.h>//找出二维数组中的最大值,并输出所有最大值对应的行与列main(){inta[5][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,24,24,15,16,21,17,18,19,24,......
  • C语言:二维数组中最大值及行号列号
    #include<stdio.h>//求二维数组中的最大值及对应的行号与列号main(){inta[5][5]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,24,15,16,21,17,18,19,20,22,23},max,......
  • 用Python制作各种用途的二维码
    当你提到二维码时,大多数人想到的是仓库管理或产品标签等"工业"应用,但这篇文章在很大程度上是关于二维码的个人和社会用途。有趣的事实二维(QR)码是在1994年发明的,最近几......
  • python 识别二维码内容 及pyzbar OSError: [WinError 126] 报错解决
    importcv2frompyzbar.pyzbarimportdecodeqrcode_image=cv2.imread('bbb.png')aa=decode(qrcode_image)printaa 如果Windows安装pyzbar后遇到OSError:[......
  • 黑名单查询:前缀树
    引入我现在有一份黑名单数据,里面有10000条域名,现在需要编写一个算法,快速判断一个域名在不在这个黑名单里,怎么设计这个算法?字典树or前缀树前缀树是N叉树的一种根节点......
  • go 二维数组
    1.定义方式有两种1)先声明/定义,再赋值var数组名[大小][大小]类型funcmain(){//二维数组示例演示/*00000000100002......
  • php中foreach循环遍历二维数组
    最近在用tp3.2框架,在查询的时候用到了select(),这条语句返回的是二维数组,所以在对返回的数据做处理时,遇到了些麻烦,百度了下foreach,终于用foreach解决了数据的筛选问题(因为......
  • 前缀树
    1.简介字典树也称为前缀树、单词查找树。其基本性质如下:根节点不包含字符,除根节点外每一个节点都只包含一个字符从根节点到某一结点,路径上经过的字符连接起来,为该节点......