This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "bits/stdc++.h"
using namespace std;
const long long MX=2e5+100;
map < long long , set < pair < long long, long long > >> mp;
long long lca[30][MX];
long long col[MX];
long long r,c,n;
int main() {
cin.tie(0);
ios_base::sync_with_stdio(0);
cin >> r >> c >> n;
for (long long i = 1; i <= n; i++) {
long long a, b;
cin >> a >> b;
mp[a].insert({b, i});
col[i] = b;
}
for (auto [zr, st]: mp) {
for (auto [zn, in]: st) {
auto it = mp[zr + 1].lower_bound({zn, 0});
if (it != mp[zr + 1].end()) {
lca[0][in] = (*it).second;
}
}
}
for (long long sl = 1; sl < 30; sl++) {
for (long long i = 1; i <= n; i++) {
lca[sl][i] = lca[sl - 1][lca[sl - 1][i]];
}
}
long long q;
cin >> q;
while (q--) {
long long x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
if (x1 > x2 || y1 > y2) {
cout << "No\n";
continue;
}
if (x1 == x2) {
cout << "Yes\n";
continue;
}
auto st = mp[x1].lower_bound(make_pair(y1, 0));
if (st == mp[x1].end()) {
cout << "No\n";
continue;
}
long long rd = x2 - x1 - 1, zr = (*st).second;
for (long long i = 0; i < 30; i++) {
if ((rd >> i) & 1) {
zr = lca[i][zr];
}
}
if (zr != 0 && col[zr] <= y2) {
cout << "Yes\n";
} else {
cout << "No\n";
}
}
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... |