#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, Q;
cin >> N >> Q;
vector<int> S(N+1), E(N+1);
for (int i = 1; i <= N; i++) cin >> S[i] >> E[i];
int ord[N+1];
iota(ord+1, ord+N+1, 1);
sort(ord+1, ord+N+1, [&E, &S](int a, int b) {return (E[a] > E[b]) || (E[a] == E[b] && S[a] > S[b]);});
int ans[N+1][N+1];
for (int j = 1; j <= N; j++) {
priority_queue<pair<int, int>> pq;
for (int i = 1; i <= N; i++) {
int c = ord[i];
while (!pq.empty() && pq.top().second > E[c]) pq.pop();
int val;
if (c == j) val = 0;
else val = (pq.empty() ? INF : -pq.top().first)+1;
pq.emplace(-val, S[c]);
ans[j][c] = val;
if (E[c] == E[j]) ans[j][c] = min(ans[j][c], 1);
}
}
while (Q--) {
int s, e;
cin >> s >> e;
int val = ans[e][s];
if (val > N) cout << "impossible\n";
else cout << val << "\n";
}
return 0;
}
/*
5 2
1 3
2 4
4 7
7 9
3 7
1 4
3 2
*/
/*
8 5
1 2
3 4
1 5
6 7
5 10
10 20
15 20
999999999 1000000000
1 6
1 7
2 4
3 3
5 8
*/
# | 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... |