Submission #864218

#TimeUsernameProblemLanguageResultExecution timeMemory
864218danikoynovEvent Hopping (BOI22_events)C++14
0 / 100
1580 ms3756 KiB
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; struct interval { int s, e, idx; }seg[maxn]; int n, q; pair < int, int > task[maxn]; void input() { cin >> n >> q; for (int i = 1; i <= n; i ++) { cin >> seg[i].s >> seg[i].e; seg[i].idx = i; } for (int i = 1; i <= q; i ++) { cin >> task[i].first >> task[i].second; } } bool cmp_end(interval seg1, interval seg2) { return seg1.e < seg2.e; } int lf[maxn], rev[maxn], rf[maxn]; void build_graph() { sort(seg + 1, seg + n + 1, cmp_end); for (int i = 1; i <= n; i ++) { rev[seg[i].idx] = i; } for (int i = 1; i <= n; i ++) { lf[i] = 1; while(seg[lf[i]].e < seg[i].s) lf[i] ++; rf[i] = n; while(seg[rf[i]].e > seg[i].e) rf[i] --; } } void answer_queries() { /**cout << "----------------------" << endl; for (int i = 1; i <= n; i ++) cout << seg[i].s << " :: " << seg[i].e << endl;*/ for (int i = 1; i <= q; i ++) { int st = rev[task[i].first], en = rev[task[i].second]; if (st > en) { cout << "impossible" << endl; continue; } int steps = 0, last_left = en + 1, last_right = en - 1; int bound_left = en, bound_right = en; bool done = false; while(!(st >= bound_left && st <= bound_right)) { ///cout << last << " " << bound << endl; steps ++; int new_left = bound_left; int new_right = bound_right; for (int i = bound_left; i < last_left; i ++) { new_left = min(new_left, lf[i]); new_right = max(new_right, rf[i]); } for (int i = last_right + 1; i <= bound_right; i ++) { new_left = min(new_left, lf[i]); new_right = max(new_right, rf[i]); } ///cout << new_bound << endl; if (new_left == bound_left && new_right == bound_right) { done = true; break; } last_left = bound_left; last_right = bound_right; bound_left = new_left; bound_right = new_right; } if (done) cout << "impossible" << endl; else cout << steps << endl; } } void solve() { input(); build_graph(); answer_queries(); } int main() { ///speed(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...