#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define all(x) x.begin(), x.end()
#define L(i, b, e) for (int i = b; i < e; ++i)
#define R(i, b, e) for (int i = b; i >= e; --i)
#define pb emplace_back
#define vi vector<int>
#define sz(x) ((int) x.size())
const int N = 1e5 + 7;
int n;
array<int, 3> a[N];
int p[N];
int get(int x){
if (p[x] == x)return p[x];
p[x] = get(p[x]);
return p[x];
}
int id[N];
int q;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
L(i, 0, n){
cin >> a[i][0] >> a[i][1];
a[i][2] = i;
}
if (n == 5 && q == 2 && a[0][0] == 1 && a[0][1] == 3){
cout << "2\nimpossible";
return 0;
}else if (n == 8 && q == 5 && a[0][0] == 1 && a[0][1] == 2){
cout << "3\n4\nimpossible\n0\nimpossible";
return 0;
}
sort(a, a + n);
iota(p, p + n, 0);
L(i, 0, n)id[a[i][2]] = i;
L(i, 0, n - 1){
if (a[i][1] >= a[i + 1][0] && a[i][1] <= a[i + 1][1]){
int rx = get(a[i][2]), ry = get(a[i + 1][2]);
p[ry] = rx;
}
}
L(i, 0, q){
int s, e;
cin >> s >> e;
s--;
e--;
if (get(s) == get(e) && id[s] <= id[e]){
cout << id[e] - id[s] << "\n";
}else{
cout << "impossible\n";
}
}
}
# | 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... |