Submission #1086255

#TimeUsernameProblemLanguageResultExecution timeMemory
1086255avighnaPassport (JOI23_passport)C++17
6 / 100
295 ms116420 KiB
#include <bits/stdc++.h>

typedef long long ll;

int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);

  ll n;
  std::cin >> n;
  std::vector<ll> l(n + 1), r(n + 1);
  for (ll i = 1; i <= n; ++i) {
    std::cin >> l[i] >> r[i];
  }

  std::vector<std::vector<std::pair<ll, ll>>> adj(5 * n);

  std::function<void(ll, ll, ll)> init;
  init = [&](ll v, ll tl, ll tr) {
    if (tl == tr) {
      adj[v + n].push_back({tl, 0});
      return;
    }
    ll tm = (tl + tr) / 2;
    init(2 * v, tl, tm);
    init(2 * v + 1, tm + 1, tr);
    adj[v + n].push_back({2 * v + n, 0});
    adj[v + n].push_back({2 * v + 1 + n, 0});
  };
  init(1, 1, n);

  std::function<void(ll, ll, ll, ll)> add;
  add = [&](ll v, ll tl, ll tr, ll i) {
    if (r[i] < tl or tr < l[i]) {
      return;
    }
    if (l[i] <= tl and tr <= r[i]) {
      adj[i].push_back({v + n, 1});
      return;
    }
    ll tm = (tl + tr) / 2;
    add(2 * v, tl, tm, i);
    add(2 * v + 1, tm + 1, tr, i);
  };
  for (ll i = 1; i <= n; ++i) {
    add(1, 1, n, i);
  }

  ll q;
  std::cin >> q;
  while (q--) {
    ll x;
    std::cin >> x;

    std::priority_queue<std::pair<ll, ll>> dq;
    std::vector<bool> vis(5 * n);
    std::vector<ll> dist(5 * n, 1e15);
    dist[x] = 0;
    dq.push({0, x});
    while (!dq.empty()) {
      auto [d, node] = dq.top();
      dq.pop();
      d *= -1;
      if (vis[node]) {
        continue;
      }
      vis[node] = true;
      for (auto &[i, w] : adj[node]) {
        if (dist[node] + w < dist[i]) {
          dist[i] = dist[node] + w;
          dq.push({-dist[i], i});
        }
      }
    }

    ll ans = 0;
    for (ll i = 1; i <= n; ++i) {
      ans = std::max(ans, dist[i]);
    }
    if (ans == ll(1e15)) {
      std::cout << "-1\n";
    } else {
      std::cout << ans << '\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...