#include<bits/stdc++.h>
using namespace std;
struct help
{
int l,r,i;
help(){}
help(int _l,int _r,int _i)
{
l=_l;
r=_r;
i=_i;
}
};
int n,q;
help a[100001],b[100001];
vector<help> e[100001];
void read()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>a[i].l>>a[i].r;
a[i].i=i;
}
for(int i=1;i<=q;i++)
{
cin>>b[i].l>>b[i].r;
b[i].i=i;
e[b[i].r].push_back(b[i]);
}
}
bool cmpr(help h1,help h2)
{
if(h1.r==h2.r)return h1.l<h2.l;
return h1.r<h2.r;
}
vector<help> v[200001];
int nxt[200001];
int ans[200001];
int p[200001];
void solve()
{
sort(a+1,a+n+1,cmpr);
for(int i=1;i<=n;i++)
{
p[a[i].i]=i;
for(int j=1;j<=n;j++)
{
if(i==j)continue;
if(a[i].r==a[j].r&&i>j||a[i].l<=a[j].r&&a[j].r<a[i].r)
v[i].push_back(a[j]);
}
}
for(int i=1;i<=n;i++)
{
//cout<<a[i].l<<" ! "<<a[i].r<<" "<<a[i].i<<endl;
for(int j=0;j<v[i].size();j++)
{
help h=v[i][j];
//cout<<h.l<<" "<<h.r<<" "<<h.i<<endl;
nxt[h.i]=a[i].i;
}
/*for(int j=1;j<=n;j++)
cout<<nxt[j]<<" ";
cout<<endl;*/
int id=a[i].i;
for(int j=0;j<e[id].size();j++)
{
help h=e[id][j];
int ver=h.l;
int cnt=0;
while(ver)
{
//cout<<"- "<<ver<<endl;
cnt++;
if(ver==h.r)
ans[h.i]=cnt;
ver=nxt[ver];
}
}
}
for(int i=1;i<=q;i++)
{
int x=p[b[i].l],y=p[b[i].r];
if(x==y)cout<<0<<endl;
else if(a[x].r==a[y].r)cout<<1<<endl;
else if(ans[i]==0)cout<<"impossible"<<'\n';
else cout<<ans[i]-1<<'\n';
}
}
int main()
{
read();
solve();
return 0;
}
/*
6
5
8 9
5 8
9 12
1 3
2 3
10 13
1 3
2 5
1 6
4 5
3 4
*/
| # | 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... |