Submission #735158

#TimeUsernameProblemLanguageResultExecution timeMemory
735158four_specksPassport (JOI23_passport)C++17
100 / 100
962 ms89444 KiB
#include <bits/stdc++.h> using namespace std; namespace { } // namespace void solve() { int n; cin >> n; int m = 1 << __lg(2 * n - 1); vector<vector<pair<int, int>>> adj(2 * m + n); for (int i = 1; i < m; i++) { adj[2 * i].emplace_back(i, 0); adj[2 * i + 1].emplace_back(i, 0); } for (int i = 0; i < n; i++) { int l, r; cin >> l >> r, --l; adj[2 * m + i].emplace_back(i + m, 1); for (l += m, r += m; l < r; l /= 2, r /= 2) { if (l % 2 == 1) adj[l++].emplace_back(2 * m + i, 0); if (r % 2 == 1) adj[--r].emplace_back(2 * m + i, 0); } } auto dijkstra = [&](vector<int> &dist) -> void { priority_queue<pair<int, int>> pq; for (int i = 1; i < 2 * m + n; i++) { if (dist[i] != 2 * n) pq.emplace(-dist[i], i); } while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (-d != dist[u]) continue; for (auto [v, wt] : adj[u]) { if (dist[u] + wt < dist[v]) { dist[v] = dist[u] + wt; pq.emplace(-dist[v], v); } } } }; vector f(2 * m + n, 2 * n), g(2 * m + n, 2 * n), h(2 * m + n, 2 * n); g[m] = h[m + n - 1] = 0; dijkstra(g); dijkstra(h); for (int i = 1; i < 2 * m + n; i++) { if (max(g[i], h[i]) != 2 * n) f[i] = g[i] + h[i]; } dijkstra(f); int q; cin >> q; for (int i = 0; i < q; i++) { int j; cin >> j, --j; cout << (f[j + m] != 2 * n ? f[j + m] : -1) << '\n'; } } int main() { ios_base::sync_with_stdio(false), cin.tie(NULL); solve(); 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...