城市轰炸:关键点受影响分析
城市轰炸:关键点受影响分析
一个城市遭到了M次轰炸,每次都炸了一个每条边都与边界平行的矩形。在轰炸后,有N个关键点,指挥官想知道,它们有没有受到过轰炸,如果有,被炸了几次,最后一次是第几轮。
输入
第一行,两个整数:M,N
以下M行,每行四个整数:x1、y1、x2、y2,表示被轰炸的矩形的左上角坐标和右下角坐标(比如'1 3 7 10'就表示被轰炸的地方是从(1,3)到(7,10)的矩形)。
再以下N行,每行两个整数,表示这个关键点的坐标。
输出
共N行,
每行第一个字符为YES或NO,表示是否被轰炸,若为YES,在一个空格后为两个整数,表示被炸了几次和最后一次是第几轮。
样例输入
1 1
1 1 10 10
11 11
样例输出
NO
说明/提示
1<=N,M<=2000
1<=x1,y1,x2,y2<=2147483647
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=2005;
int n,m;
int a[maxn][maxn],x1[maxn],y1[maxn],x2[maxn],y2[maxn];
int sum[maxn][maxn];
int main(){
scanf('%d%d',&m,&n);
for(int i=1;i<=m;i++){
scanf('%d%d%d%d',&x1[i],&y1[i],&x2[i],&y2[i]);
a[x1[i]][y1[i]]++;
a[x1[i]][y2[i]+1]--;
a[x2[i]+1][y1[i]]--;
a[x2[i]+1][y2[i]+1]++;
}
for(int i=1;i<=2000;i++)
for(int j=1;j<=2000;j++)
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
for(int i=1;i<=n;i++){
int x,y;
scanf('%d%d',&x,&y);
if(sum[x][y]==0)
printf('NO\n');
else
printf('YES %d %d\n',sum[x][y],a[x1[sum[x][y]]][y1[sum[x][y]]]);
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/oiy6 著作权归作者所有。请勿转载和采集!