二维数组的建立,二维差分的使用。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <map>
#include <string>
#include <vector>
#include <iostream>
using namespace std;
//for(i=1;i<n;i++)
//scanf("%d",&n);
//printf("\n",)
int main()
{
int i,j,k,n,m,l,q,w;
while(scanf("%d%d",&n,&m)!=EOF)
{
int **p;
p=(int**)malloc(sizeof(int*)*(n+10));
for (i=0;i<n+10;i++)
{
p[i]=(int*)malloc(sizeof(int)*(m+10));
}
for(i=0;i<=n+5;i++)
{
for(j=0;j<=m+5;j++)
p[i][j]=0;
}
scanf("%d",&j);
for(i=0;i<j;i++)
{
scanf("%d%d%d%d",&k,&l,&q,&w);//x1,y1,x2,y2
p[k][l]+=1;
p[q+1][w+1]+=1;
p[k][w+1]-=1;
p[q+1][l]-=1;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
p[i][j]+=p[i-1][j]+p[i][j-1]-p[i-1][j-1];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(p[i][j]>0)
p[i][j]=1;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
p[i][j]+=p[i-1][j]+p[i][j-1]-p[i-1][j-1];
}
scanf("%d",&j);
for(i=0;i<j;i++)
{
scanf("%d%d%d%d",&k,&l,&q,&w);//x1,y1,x2,y2
if((p[q][w]-p[k-1][w]-p[q][l-1]+p[k-1][l-1])==((q-k+1)*(w-l+1)))
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}