Submission #937709

#TimeUsernameProblemLanguageResultExecution timeMemory
937709LucaIlieEvent Hopping (BOI22_events)C++17
10 / 100
1595 ms8400 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 1e5; const int MAX_T = 2e5; struct event { int i, s, e; }; int prv[MAX_N]; event events[MAX_N]; map<int, int> nrm; bool canSwitch( event a, event b ) { return (b.s <= a.e && a.e <= b.e); } int main() { int n, q; cin >> n >> q; for ( int i = 1; i <= n; i++ ) { cin >> events[i].s >> events[i].e; nrm[events[i].s] = nrm[events[i].e] = 1; events[i].i = i + 1; } int t = 0; for ( auto p: nrm ) nrm[p.first] = ++t; for ( int i = 1; i <= n; i++ ) { events[i].s = nrm[events[i].s]; events[i].e = nrm[events[i].e]; } for ( int i = 1; i <= n; i++ ) { prv[i] = i; for ( int j = 1; j <= n; j++ ) { if ( canSwitch( events[j], events[i] ) ) { if ( events[j].s < events[prv[i]].s ) prv[i] = j; } } } while ( q-- ) { int s, e, x = 1; cin >> s >> e; int i = e; while ( events[i].s > events[s].e && prv[i] != i ) { i = prv[i]; x++; } if ( s == e ) cout << 0 << "\n"; else if ( canSwitch( events[s], events[i] ) ) cout << x << "\n"; else cout << "impossible\n"; } 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...