#include <iostream>
#include <vector>
#include <iomanip>
#include <map>
#include <set>
#include <numeric>
#include <queue>
#include <deque>
#include <algorithm>
#include <stack>
#include <unordered_map>
using namespace std;
using ll = long long;
int inf = (int)1e9;
void chmin(int& a, int b) {
a = min(a, b);
}
struct SegTree {
int n, N;
vector<int> dat, lazy;
int E = inf;
SegTree(int M) {
int x = 0;
while ((1 << x) < M) x++;
n = (1 << x);
N = 2 * n;
dat.assign(N, inf);
lazy.assign(N, inf);
}
int left(int k) {
return ((2*k) + 1);
}
int right(int k) {
return ((2*k) + 2);
}
void eval(int k) {
if (k < n-1) {
chmin(lazy[left(k)], lazy[k]);
chmin(lazy[right(k)], lazy[k]);
}
chmin(dat[k], lazy[k]);
lazy[k] = inf;
}
void update(int a, int b, int x, int k, int l, int r) {
eval(k);
if (b <= l or r <= a) return;
if (a <= l and r <= b) {
chmin(lazy[k], x);
eval(k);
return;
}
update(a, b, x, left(k), l, (l+r)/2);
update(a, b, x, right(k), (l+r)/2, r);
dat[k] = max(dat[left(k)], dat[right(k)]);
}
void update(int l, int r, ll x) {
update(l, r, x, 0, 0, n);
}
int query(int a, int b, int k, int l, int r) {
eval(k);
if (b <= l or r <= a) return -inf;
if (a <= l and r <= b) {
return dat[k];
}
return max(query(a, b, left(k), l, (l+r)/2), query(a, b, right(k), (l+r)/2, r));
}
int query(int l, int r) {
return query(l, r, 0, 0, n);
}
};
int main() {
int N, M, Q;cin >> N >> M >> Q;
vector<vector<int>> IN(N + 1);
for (int i = 0;i < M;i++) {
int l, r;cin >> l >> r;
IN[l].push_back(r);
}
vector<int> S(Q), E(Q);
vector<vector<int>> QRY(N + 1);
for (int i = 0;i < Q;i++) {
cin >> S[i] >> E[i];
QRY[S[i]].push_back(i);
}
SegTree SEG(N + 1);
vector<int> res(Q, false);
for (int i = N;i >= 1;i--) {
for (int r : IN[i]) {
SEG.update(i, r +1, r);
}
for (auto id : QRY[i]) {
int mx = SEG.query(S[id], E[id] + 1);
//cout << i << " " << mx << endl;
if (mx <= E[id]) {
res[id] = true;
}
}
}
for (int i = 0;i < Q;i++) cout << (res[i] ? "YES" : "NO") << endl;
}
| # | 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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |