#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "deb.h"
#else
#define debug(...)
#endif
class segtree {
public:
vector<int> tree, lazy, ands;
int n;
segtree(int _n) : n(_n) {
tree.resize(4 * n);
fill(tree.begin(), tree.end(), -1);
lazy.resize(4 * n);
ands.resize(4 * n);
}
void apply(int v, int x, bool prv) {
lazy[v] = max(lazy[v], x);
tree[v] = max(tree[v], x);
if (prv) {
ands[v] = true;
}
}
void modify(int v, int l, int r, int ll, int rr, int x) {
if (ll >= r || l >= rr) {
return;
}
if (ll >= l && rr <= r) {
apply(v, x, true);
return;
}
int m = (ll + rr) / 2;
apply(2 * v + 1, lazy[v], ands[v]);
apply(2 * v + 2, lazy[v], ands[v]);
modify(2 * v + 1, l, r, ll, m, x);
modify(2 * v + 2, l, r, m, rr, x);
tree[v] = min(tree[2 * v + 1], tree[2 * v + 2]);
ands[v] = ands[2 * v + 1] && ands[2 * v + 2];
}
pair<int, int> get(int v, int l, int r, int ll, int rr) {
if (ll >= r || l >= rr) {
return make_pair(int(1e9), true);
}
if (ll >= l && rr <= r) {
return make_pair(tree[v], ands[v]);
}
int m = (ll + rr) / 2;
apply(2 * v + 1, lazy[v], ands[v]);
apply(2 * v + 2, lazy[v], ands[v]);
pair<int, int> lc = get(2 * v + 1, l, r, ll, m);
pair<int, int> rc = get(2 * v + 2, l, r, m, rr);
return make_pair(min(lc.first, rc.first), lc.second && rc.second);
}
};
void solve() {
int n, m, q;
cin >> n >> m >> q;
vector<pair<int, int>> procs(m);
for (int i = 0; i < m; i++) {
cin >> procs[i].first >> procs[i].second;
--procs[i].first; --procs[i].second;
}
vector<vector<pair<int, int>>> at(n);
vector<vector<int>> rn(n);
for (int i = 0; i < q; i++) {
int l, r;
cin >> l >> r;
--l; --r;
at[r].push_back(make_pair(l, i));
}
for (int i = 0; i < m; i++) {
rn[procs[i].second].push_back(procs[i].first);
}
vector<bool> ans(q);
segtree seg(n);
vector<int> mx(n, -1);
vector<bool> cov(n);
for (int i = 0; i < n; i++) {
for (int x : rn[i]) {
seg.modify(0, x, i + 1, 0, n, x);
}
for (auto [k, idx] : at[i]) {
ans[idx] = (seg.get(0, k, i + 1, 0, n).first >= k) && (seg.get(0, k, i + 1, 0, n).second);
}
}
for (int i = 0; i < q; i++) {
cout << (ans[i] ? "YES" : "NO") << '\n';
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |