Submission #1229332

#TimeUsernameProblemLanguageResultExecution timeMemory
1229332avighnaEvent Hopping (BOI22_events)C++20
0 / 100
157 ms6784 KiB
#include <bits/stdc++.h> int main() { int n, q; std::cin >> n >> q; struct time { int s, e; }; std::vector<time> a(n); for (auto &[s, e] : a) { std::cin >> s >> e; } auto comp = [](time a, time b) { return a.s < b.s; }; std::sort(a.begin(), a.end(), comp); std::vector<std::pair<time, int>> suff(n); suff[n - 1] = {a[n - 1], n - 1}; for (int i = n - 2; i >= 0; --i) { suff[i] = suff[i + 1]; if (a[i].e < suff[i].first.e) { suff[i] = {a[i], i}; } } int tot_comps = 0, timer = 0; std::vector<int> comp_num(n), start(n); auto dfs = [&](auto &&self, int u) { start[u] = timer++; time t = {a[u].e, 0}; auto it = std::lower_bound(a.begin(), a.end(), t, comp); int idx = suff[it - a.begin()].second; if (it == a.end() or a[u].e > a[idx].e) { comp_num[u] = tot_comps++; return; } self(self, idx); comp_num[u] = comp_num[idx]; }; dfs(dfs, 0); while (q--) { int beg, end; std::cin >> beg >> end; if (comp_num[beg] != comp_num[end] or start[beg] > start[end]) { std::cout << "impossible\n"; } else { std::cout << start[end] - start[beg] << '\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...