#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
const int maxn = 2e5 + 5;
int up[maxn][20];
int lb(vector<pii> &V, pii x) {
return lower_bound(V.begin(), V.end(), x) - V.begin();
}
int main() {
int n, m, k; cin >> n >> m >> k;
vector<int> x(k+2), y(k+2, m+5);
for(int i=1; i<=k+1; i++)
for(int j=0; j<20; j++) up[i][j] = k + 1;
map<int, vector<pii> > mp;
for(int i=1; i<=k; i++) {
cin >> x[i] >> y[i];
mp[x[i]].push_back({ y[i], i });
}
for(auto &[r, vec] : mp)
sort(vec.begin(), vec.end());
for(auto [r, vec] : mp) {
for(auto [c, i] : vec) {
int p = lb(mp[r+1], pii{ c, 0 });
if(p != mp[r+1].size()) up[i][0] = mp[r+1][p].second;
}
}
for(int j=1; j<20; j++)
for(int i=1; i<=k+1; i++) up[i][j] = up[ up[i][j-1] ][j-1];
int q; cin >> q;
while(q--) {
int tr, tc, br, bc; cin >> tr >> tc >> br >> bc;
if(tr > br || tc > bc) {
cout << "No\n";
continue;
}
if(tr == br) {
cout << "Yes\n";
continue;
}
int jmp = br - tr - 1;
int p = lb(mp[tr], pii{ tc, 0 });
if(p == mp[tr].size()) {
cout << "No\n";
continue;
}
int u = mp[tr][p].second;
for(int j=19; j>=0; j--)
if(jmp & (1 << j)) u = up[u][j];
cout << (y[u] <= bc ? "Yes" : "No") << '\n';
}
}
# | 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... |