有空再写题解,有问题可以交流
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include<map>
#include<queue>
using namespace std;
const int inf = 0x3f3f3f3f;
typedef long long LL;
int main(void) {
int n, m;
while (scanf("%d%d", &n, &m) != EOF) {
int **x;
x = (int **)malloc(sizeof(int *)*(n + 10));
for (int i = 0; i < n + 10; i++) {
x[i] = (int *)malloc(sizeof(int)*(m + 10));
}
for (int i = 0; i < n + 10; i++) {
for (int z = 0; z < m + 10; z++) {
x[i][z] = 0;
}
}
int q;
scanf("%d", &q);
while (q--) {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
x[x1][y1] += 1; x[x2 + 1][y2 + 1] += 1;
x[x1][y2 + 1] -= 1; x[x2 + 1][y1] -= 1;
}
for (int i = 1; i <= n; i++) {
for (int z = 1; z <= m; z++) {
x[i][z] += x[i - 1][z] + x[i][z - 1] - x[i - 1][z - 1];
}
}
for (int i = 1; i <= n; i++) {
for (int z = 1; z <= m; z++) {
if (x[i][z]) {
//printf("%d %d\n", i, z);
x[i][z] = 1;
}
}
}
for (int i = 1; i <= n; i++) {
for (int z = 1; z <= m; z++) {
x[i][z] += x[i - 1][z] + x[i][z - 1] - x[i - 1][z - 1];
}
}
scanf("%d", &q);
while (q--) {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
int ans = x[x2][y2] - x[x1 - 1][y2] - x[x2][y1 - 1] + x[x1 - 1][y1 - 1];
if (ans == (x2 - x1 + 1)*(y2 - y1 + 1)) {
printf("YES\n");
}
else printf("NO\n");
}
free(x);
}
}