#include "bits/stdc++.h"
using namespace std;
#define int long long
signed main() {
int r, c, n;
cin >> r >> c >> n;
vector <int> a(n);
vector <int> b(n);
for (int i = 0; i < n; i ++) cin >> a[i] >> b[i];
set <pair <int, int>> st;
for (int i = 0; i < n; i ++) st.insert({a[i], b[i]});
map <pair <int, int>, vector <pair <int, int>>> g;
vector <int> x1;
vector <int> x2;
int x_f = -1, x_s = -1;
for (auto [i, j] : st) {
if (x_f == -1) {
x_f = i;
x1.push_back(j);
continue;
}
if (i == x_f) {
//g[{i, j}].push_back({x_f, x1.back()});
g[{x_f, x1.back()}].push_back({i, j});
x1.push_back(j);
continue;
}
if (x_s == -1 && i == x_f + 1) {
x_s = i;
x2.push_back(j);
int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin();
if (ind == 0) continue;
ind --;
// g[{i, j}].push_back({x_f, x1[ind]});
g[{x_f, x1[ind]}].push_back({i, j});
continue;
}
if (x_s == -1) {
x1.clear();
x_f = i;
x1.push_back(j);
continue;
}
if (x_s == i) {
// g[{i, j}].push_back({x_s, x2.back()});
g[{x_s, x2.back()}].push_back({i, j});
int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin();
if (ind == 0) continue;
ind --;
// g[{i, j}].push_back({x_f, x1[ind]});
g[{x_f, x1[ind]}].push_back({i, j});
continue;
}
if (x_s + 1 == i) {
x_f = x_s;
x1.swap(x2);
x2.clear();
x_s = i;
x2.push_back(j);
int ind = upper_bound(x1.begin(), x1.end(), j) - x1.begin();
if (ind == 0) continue;
ind --;
// g[{i, j}].push_back({x_f, x1[ind]});
g[{x_f, x1[ind]}].push_back({i, j});
continue;
}
if (x_s + 1 < i) {
x1.clear();
x2.clear();
x_s = -1;
x_f = i;
x1.push_back(j);
continue;
}
}
/*
// Graph
for (auto [ind, v] : g) {
int x = ind.first;
int y = ind.second;
cout << "x =, y = " << x << ' ' << y << endl;
for (auto [i, j] : v) {
cout << i << ' ' << j << endl;
}
cout << endl;
}
//
*/
map <pair <int, int>, int> vis;
map <pair <int, int>, int> col;
int cnt = 0;
auto bfs = [&] (int i, int j) -> void {
cnt ++;
queue <pair <int, int>> q;
q.push({i, j});
vis[{i, j}] = 1;
col[{i, j}] = cnt;
while (!q.empty()) {
i = q.front().first, j = q.front().second;
q.pop();
for (auto [x, y] : g[{i, j}]) {
if (vis[{x, y}]) continue;
vis[{x, y}] = 1;
col[{x, y}] = cnt;
q.push({x, y});
}
}
};
for (auto [i, j] : st) {
if (vis[{i, j}]) continue;
bfs(i, j);
}
int t;
cin >> t;
while (t --) {
int sx, sy, ex, ey;
cin >> sx >> sy >> ex >> ey;
int x = sx, y = sy;
for (auto [i, j] : st) {
if (i < x || j < y) continue;
if (i > x) break;
// i == x
if (j <= ey && x < ex) y = j, x ++;
}
if (x == ex && y <= ey) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |