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;
class coord {
public:
int x, y;
bool operator < (const coord &A) const {
if(x != A.x)
return x < A.x;
return y < A.y;
}
bool operator > (const coord &A) const {
if(x != A.x)
return x > A.x;
return y > A.y;
}
};
const int NMAX = 2e5 + 5;
int R, C, N, Q, ancestor[NMAX][32];
coord a[NMAX];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> R >> C >> N;
for(int i = 1; i <= N; ++i)
cin >> a[i].x >> a[i].y;
sort(a + 1, a + N + 1);
for(int i = 2; i <= N; ++i) {
int st = 1, dr = N, prv_line = a[i].x - 1, l = -1, r = -1;
while(st <= dr) {
int mid = (st + dr) >> 1;
if(a[mid].x >= prv_line) {
l = mid;
dr = mid - 1;
}
else
st = mid + 1;
}
st = 1, dr = N;
while(st <= dr) {
int mid = (st + dr) >> 1;
if(a[mid].x <= prv_line) {
r = mid;
st = mid + 1;
}
else
dr = mid - 1;
}
if(l == -1 || r == -1 || a[l].x != prv_line || a[r].x != prv_line)
continue;
int ans = -1;
while(l <= r) {
int mid = (l + r) >> 1;
if(a[mid].y <= a[i].y) {
ans = mid;
l = mid + 1;
}
else
r = mid - 1;
}
if(ans != -1)
ancestor[i][0] = ans;
}
for(int level = 1; level < 31; ++level)
for(int i = 1; i <= N; ++i)
ancestor[i][level] = ancestor[ancestor[i][level - 1]][level - 1];
cin >> Q;
for(int q = 0; q < Q; ++q) {
int 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;
}
--x2;
int ans = -1, st = 1, dr = N;
while(st <= dr) {
int mid = (st + dr) >> 1;
if(a[mid] > coord{x2, y2})
dr = mid - 1;
else {
if(a[mid].x == x2)
ans = mid;
st = mid + 1;
}
}
if(ans == -1 || a[ans].y < y1 || a[ans].y > y2) {
cout << "No\n";
continue;
}
for(int level = 30; level >= 0; --level) {
int father = ancestor[ans][level];
if(a[father].x >= x1)
ans = father;
}
if(a[ans].x == x1 && a[ans].y >= y1)
cout << "Yes\n";
else
cout << "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... |