覆盖问题<shui>

题目链接

/*
hang[maxn]标记每行是否可以被攻击,并计算前缀和
lie [maxn]标记每列是否可以被攻击,并计算前缀和
*/
#include<cstdio>   //
#include<cstring>
#include<iostream>
using namespace std;
const int maxn =100000+5;
int hang[maxn];
int lie[maxn];
int n,m,k,q;
int t;
int main ()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d",&n,&m,&k,&q);
        for(int i=0;i<=n;i++)
            hang[i]=0;
        for(int j=0;j<=m;j++)
            lie[j]=0;
        int x ,y;
        for(int i=1;i<=k;i++)
        {
            scanf("%d%d",&x,&y);
            hang[x]=1;
            lie[y]=1;
        }
        for(int i=1;i<=n;i++)
            hang[i]+=hang[i-1];
        for(int j=1;j<=m;j++)
            lie[j]+=lie[j-1];
        int x1,x2,y1,y2;
        for(int i=0;i<q;i++)
        {
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            if((hang[x2]-hang[x1-1]==x2-x1+1)||(lie[y2]-lie[y1-1]==y2-y1+1))
                printf("Yes
");
            else
                printf("No
");
        }
    }
    return 0;
}
想的太多,做的太少。
原文地址:https://www.cnblogs.com/pealicx/p/6115600.html