Submission #796748

#TimeUsernameProblemLanguageResultExecution timeMemory
796748GusterGoose27Passport (JOI23_passport)C++17
100 / 100
664 ms74516 KiB
#include <bits/stdc++.h> using namespace std; const int MAXN = 2e5+5; const int inf = 1e9; typedef pair<int, int> pii; int dist[2][2*MAXN]; int sumdist[2*MAXN]; int n; vector<pii> edges[2*MAXN]; void build() { for (int i = 1; i < n; i++) { edges[2*i].push_back(pii(i, 0)); edges[2*i+1].push_back(pii(i, 0)); } } void assign(int i, int l, int r) { for (; r > l; l /= 2, r /= 2) { if (l & 1) edges[l++].push_back(pii(i, 1)); if (r & 1) edges[--r].push_back(pii(i, 1)); } } void dijkstra(int curdist[]) { priority_queue<pii, vector<pii>, greater<pii>> pq; for (int i = 0; i < 2*n; i++) pq.push(pii(curdist[i], i)); while (!pq.empty()) { pii tp = pq.top(); pq.pop(); int cur = tp.second; if (tp.first > curdist[cur]) continue; for (pii p: edges[cur]) { int nxtdist = tp.first+p.second; if (nxtdist < curdist[p.first]) { curdist[p.first] = nxtdist; pq.push(pii(nxtdist, p.first)); } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; build(); fill(dist[0], dist[0]+2*n, inf); fill(dist[1], dist[1]+2*n, inf); for (int i = 0; i < n; i++) { int l, r; cin >> l >> r; l--; r--; assign(i+n, l+n, r+n+1); if (l == 0) dist[0][i+n] = 0; if (r == n-1) dist[1][i+n] = 0; } dijkstra(dist[0]); dijkstra(dist[1]); for (int i = 0; i < 2*n; i++) { sumdist[i] = (i < n) ? inf : min(inf, dist[0][i]+dist[1][i]); } // for (int i = n; i < 2*n; i++) cerr << sumdist[i] << '\n'; dijkstra(sumdist); int q; cin >> q; for (int i = 0; i < q; i++) { int s; cin >> s; s += n-1; // cerr << dist[0][s] << ' ' << dist[1][s] << '\n'; cout << ((sumdist[s] < inf) ? sumdist[s]+1 : -1) << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...