覆盖问题<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\n");
else
printf("No\n");
}
}
return 0;
}
想的太多,做的太少。