城市轰炸:关键点受影响分析

一个城市遭到了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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录