#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, q;
vector<pair<int, int>> adj[200005];
void dijkstra(int strt, vector<int> &dist) {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
dist[strt] = 0;
pq.emplace(0, strt);
while (!pq.empty()) {
int cdist = pq.top().first, curr = pq.top().second;
pq.pop();
if (cdist > dist[curr]) continue;
for (auto [x, d] : adj[curr]) {
if (dist[curr] + d < dist[x]) {
dist[x] = dist[curr] + d;
pq.emplace(dist[x], x);
}
}
}
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 1; i <= n; i++) {
int l, r; cin >> l >> r;
for (int j = l; j <= r; j++) {
if (j == i) continue;
adj[j].emplace_back(i, 1);
}
}
vector<int> dist1(n + 5, 2e9), distn(n + 5, 2e9);
dijkstra(1, dist1);
dijkstra(n, distn);
for (int i = 1; i <= n; i++) {
adj[n + 1].emplace_back(i, dist1[i] + distn[i] - (i != 1 && i != n));
}
vector<int> dist(n + 5, 2e9);
dijkstra(n + 1, dist);
cin >> q;
while (q--) {
int x; cin >> x;
cout << (dist[x] == 2e9 ? -1 : dist[x]) << "\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... |