이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |