#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int n,m,a[
20000007];
void add(
int i,
int j,
int val){a[(i-
1)*m+j]+=
val;}
int q(
int i,
int j)
{
if(i==
0||j==
0)
return 0;
return a[(i-
1)*m+
j];
}
int main(){
int p,Q;
while(cin>>n>>
m){
cin>>
p;
int x1,y1,x2,y2;
rep(i,1,n*m)a[i]=
0;
while(p--
){
scanf("%d%d%d%d",&x1,&y1,&x2,&
y2);
add(x1,y1,1);add(x1,y2+
1,-
1);
add(x2+
1,y1,-
1);add(x2+
1,y2+
1,
1);
}
rep(i,1,n)
//把差分数组转化成计数数组
rep(j,
1,m){
a[(i-
1)*m+j]=q(i,j-
1)+q(i-
1,j)-q(i-
1,j-
1)+a[(i-
1)*m+
j];
}
rep(i,1,n)
//大于1的当成1
rep(j,
1,m){
if(a[(i-
1)*m+j]!=
0) a[(i-
1)*m+j]=
1;
}
rep(i,1,n)
//把计数数组转换成二维前缀和
rep(j,
1,m){
a[(i-
1)*m+j]=q(i,j-
1)+q(i-
1,j)-q(i-
1,j-
1)+a[(i-
1)*m+
j];
}
cin>>
Q;
rep(i,1,Q){
scanf("%d%d%d%d",&x1,&y1,&x2,&
y2);
int res=q(x2,y2)+q(x1-
1,y1-
1)-q(x1-
1,y2)-q(x2,y1-
1);
if(res==(x2-x1+
1)*(y2-y1+
1)) printf(
"YES\n");
else printf(
"NO\n");
}
}
}
转载于:https://www.cnblogs.com/zsben991126/p/10739688.html