二维前缀和好题hdu6514

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