题目
https://cn.vjudge.net/problem/HDU-6514
题意
给你个n*m 的图 给你若干矩形去覆盖 查询若干矩形是否被全部覆盖
思路
二维前缀和 计算查询面积覆盖的面积是否等于他本身面积
#include <bits/stdc++.h>
using namespace std;
int z[10000006];
int sum[10000006];
int n,m;
int getid(int x,int y)
{
return (x-1)*m + y;
}
int main()
{
while(scanf("%d%d",&n,&m) != EOF)
{
int q;
scanf("%d",&q);
memset(z,0,sizeof(z));
for(int i = 1;i <= q;i++)
{
int x,y,xx,yy;
scanf("%d%d%d%d",&x,&y,&xx,&yy);
int a = getid(x,y);
z[a]++;
a = getid(xx+1,y);
z[a]--;
a = getid(x,yy+1);
z[a]--;
a = getid(xx+1,yy+1);
z[a]++;
}
int qw = 0;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
int x=i,y = j;
int a = getid(x,y);
int b = getid(x-1,y);
int c = getid(x,y-1);
int d = getid(x-1,y-1);
z[a] = z[a] + z[b] + z[c] - z[d];
}
}
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
int x=i,y = j;
int a = getid(x,y);
int b = getid(x-1,y);
int c = getid(x,y-1);
int d = getid(x-1,y-1);
if(z[a] > 0) z[a] = 1;
z[a] = z[a] + z[b] + z[c] - z[d];
}
}
scanf("%d",&q);
while(q--)
{
int x,y,xx,yy;
scanf("%d%d%d%d",&x,&y,&xx,&yy);
int num = (xx-x+1)*(yy-y+1);
int a,b,c,d;
a = getid(xx,yy);
b = getid(x-1,y-1);
c = getid(x-1,yy);
d = getid(xx,y-1);
int qwe = z[a] - z[d] - z[c] + z[b];
if(qwe == num)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
}
return 0;
}