#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll A = 1'000'000'000'000LL;
int32_t main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, q;
cin >> n >> q;
ll d, ca, cb;
cin >> d >> ca >> cb;
vector<ll> v(2 * n + 2);
v[0] = 0;
v[2 * n + 1] = A;
for (int i = 1; i <= 2 * n; ++i) {
cin >> v[i];
if (i % 2) v[i]--;
else v[i]++;
}
vector<pair<ll, ll>> segs;
for (int i = 0; i <= n; ++i) {
segs.emplace_back(v[2 * i], v[2 * i + 1]);
}
set<pair<ll, ll>> st;
st.insert(segs[0]);
for (int i = 1; i <= n; ++i) {
ll yes = 2 * A;
auto it = st.lower_bound({segs[i].first - d, 0});
if (it != st.end()) {
yes = min(yes, (*it).first + d);
}
if (it != st.begin()) {
it--;
if (segs[i].first - d <= (*it).second) {
yes = min(yes, segs[i].first);
}
}
if (yes <= segs[i].second) {
st.insert({yes, segs[i].second});
}
}
auto can_reach = [&] (ll p) -> bool {
auto it = st.lower_bound({p + 1, -1});
if (it != st.begin()) {
it--;
auto [l, r] = *it;
return l <= p && p <= r;
}
return false;
};
while (q--) {
ll p;
cin >> p;
// cout << "? " << " " << p << '\n';
cout << (can_reach(p) ? p : -1LL) << '\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... |