Submission #1253605

#TimeUsernameProblemLanguageResultExecution timeMemory
1253605NHristovPassport (JOI23_passport)C++20
6 / 100
358 ms67568 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; const int N = 2e5 + 5; int n; int ord; vector < pair < int, int > > g[4 * N]; int leftChild[4 * N], rightChild[4 * N]; int build(int l, int r) { if (l == r) { return l; } int mid = (l + r) / 2; int node = ++ord; int L = build(l, mid), R = build(mid + 1, r); leftChild[node] = L, rightChild[node] = R; g[L].push_back({node, 0}); g[R].push_back({node, 0}); return node; } void update(int node, int l, int r, int ql, int qr, int num) { if (l > qr || r < ql) { return; } if (ql <= l && r <= qr) { g[node].push_back({num, 1}); return; } int mid = (l + r) / 2; if (ql <= mid) { update(leftChild[node], l, mid, ql, qr, num); } if (mid + 1 <= qr) { update(rightChild[node], mid + 1, r, ql, qr, num); } } int dist[4 * N][2]; void bfs01(int type, int st) { for (int i = 1; i <= ord; i++) { dist[i][type] = -1; } deque < int > dq; dist[st][type] = 0; dq.push_back(st); while (!dq.empty()) { int u = dq.front(); dq.pop_front(); for (auto [v, w] : g[u]) { if (dist[v][type] != -1) { continue; } dist[v][type] = dist[u][type] + w; if (w == 0) { dq.push_front(v); } else { dq.push_back(v); } } } } int ans[N]; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; ord = n; int root = build(1, n); for (int i = 1; i <= n; i++) { int l, r; cin >> l >> r; update(root, 1, n, l, r, i); ans[i] = -1; } bfs01(0, 1); bfs01(1, n); priority_queue < pair < int, int >, vector < pair < int, int > >, greater < pair < int, int > > > pq; for (int i = 1; i <= n; i++) { if (dist[i][0] != -1 && dist[i][1] != -1) { ans[i] = max(1, dist[i][0]) + max(1, dist[i][1]) - 1; pq.push({ans[i], i}); } } while (!pq.empty()) { int u = pq.top().second; pq.pop(); for (auto [v, w] : g[u]) { if (ans[v] == -1 || ans[v] > ans[u] + w) { ans[v] = ans[u] + w; pq.push({ans[v], v}); } } } int t; cin >> t; while (t--) { int query; cin >> query; cout << ans[query] << endl; } return 0; }
#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...