hdu 5480(前缀和)

时间:2023-12-26 08:36:07

题意:如果一个点,则这点的横竖皆被占领,询问矩阵是否全被占领.

思路:将被占领的x,y标记为1,用x表示1 - i的和

如果x轴的差为 x2 - x1 + 1则表示全被占领,y轴同理

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <functional>
#include <vector>
#include <queue>
typedef long long ll;
using namespace std; const int N = 1e5 + 5;
int x[N];
int y[N]; int main()
{
int t;
int n,m;
int p,q;
int x1,x2,y1,y2;
scanf("%d",&t);
while(t--)
{ scanf("%d%d%d%d",&n,&m,&p,&q);
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
for(int i = 1;i <= p;i++)
{
scanf("%d%d",&x1,&y1);
x[x1]= y[y1] = 1;
}
for(int i = 2;i <= n;i++)
x[i] += x[i-1];
for(int i = 2;i <= m;i++)
y[i] += y[i-1]; for(int i = 1;i <= q;i++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
if(x[x2] - x[x1-1] ==(x2 - x1 + 1) || y[y2] - y[y1-1] ==(y2 - y1 + 1))
printf("Yes\n");
else
printf("No\n");
} }
return 0;
}