#include <bits/stdc++.h>
using namespace std;
using pint = pair<int, int>;
int n, k, m, a[200000], b[200000], q;
template<int N>
struct St {
int st[N << 1];
void update(int i, int v) {
for (st[i += N] = v; i >>= 1;) st[i] = max(st[i << 1], st[i << 1 | 1]);
}
int query(int l, int r) {
int ret = -1e9;
for (l += N, r += N; l < r; l >>= 1, r >>= 1) {
if (l & 1) ret = max(ret, st[l++]);
if (r & 1) ret = max(ret, st[--r]);
}
return ret;
}
int operator[](int i) { return st[i + N]; }
};
St<200000> l[18], r[18];
int main() {
cin >> n >> k >> m;
vector<int> add[n], rem[n + 1];
for (int i = m; i--;) {
cin >> a[i] >> b[i];
if (--a[i] >= --b[i]) continue;
add[a[i]].emplace_back(b[i]);
rem[min(a[i] + k, b[i])].emplace_back(b[i]);
}
multiset<int> s;
vector<St<200000>> l(18), r(18);
for (int i = 0; i < n; ++i) {
for (int x: add[i]) s.emplace(x);
for (int x: rem[i]) s.erase(s.find(x));
r[0].update(i, s.empty() ? i : *s.rbegin());
add[i].clear();
rem[i].clear();
}
for (int i = m; i--;) {
if (b[i] >= a[i]) continue;
add[max(b[i], a[i] - k) + 1].emplace_back(b[i]);
rem[a[i] + 1].emplace_back(b[i]);
}
s.clear();
for (int i = 0; i < n; ++i) {
for (int x: add[i]) s.emplace(x);
for (int x: rem[i]) s.erase(s.find(x));
l[0].update(i, -(s.empty() ? i : *s.begin()));
}
for (int k = 0; ++k < 18;) {
for (int i = n; i--;) {
l[k].update(i, l[k - 1].query(-l[k - 1][i], r[k - 1][i] + 1));
r[k].update(i, r[k - 1].query(-l[k - 1][i], r[k - 1][i] + 1));
}
}
cin >> q;
while (q--) {
int si, ti;
cin >> si >> ti;
si--, ti--;
int ans = 0;
for (int k = 18, l0 = si, r0 = si; k--;) {
int l1 = -l[k].query(l0, r0 + 1);
int r1 = r[k].query(l0, r0 + 1);
if (ti < l1 or ti > r1) {
l0 = l1;
r0 = r1;
ans += 1 << k;
}
}
cout << (ans >= n ? -1 : ans + 1) << 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... |