Submission #644776

#TimeUsernameProblemLanguageResultExecution timeMemory
644776FedShatEvent Hopping (BOI22_events)C++17
25 / 100
1578 ms4224 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; constexpr int INF = numeric_limits<int>::max() / 2; constexpr ll INFLL = numeric_limits<ll>::max() / 2; template<class T> istream &operator>>(istream &is, vector<T> &a) { for (auto &i : a) { is >> i; } return is; } int main() { cin.tie(0)->sync_with_stdio(0); #ifdef __APPLE__ freopen("input.txt", "r", stdin); #endif int n, q; cin >> n >> q; vector<array<int, 3>> lr(n); for (int i = 0; i < n; ++i) { cin >> lr[i][0] >> lr[i][1]; lr[i][2] = i; } sort(lr.begin(), lr.end()); vector<int> p(n); for (int i = 0; i < n; ++i) { p[lr[i][2]] = i; } auto can = [&](int i, int j) {// i -> j auto [li, ri, ii] = lr[i]; auto [lj, rj, jj] = lr[j]; return lj <= ri && ri <= rj; }; vector<int> prv(n); for (int i = 0; i < n; ++i) { int ind = -1; for (int j = 0; j < i; ++j) { if (can(j, i)) { if (ind == -1 || lr[j][0] < lr[ind][0]) { ind = j; } } } prv[i] = ind; } while (q--) { int a, b; cin >> a >> b; --a; --b; a = p[a]; b = p[b]; int ans = 0; while (!can(a, b)) { if (prv[b] == -1) { ans = -1; break; } b = prv[b]; ++ans; } if (a != b && ans != -1) { ++ans; } if (ans == -1) { cout << "impossible\n"; } else { 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...
#Verdict Execution timeMemoryGrader output
Fetching results...