Submission #1170948

#TimeUsernameProblemLanguageResultExecution timeMemory
1170948JuanJLEvent Hopping (BOI22_events)C++20
0 / 100
160 ms6812 KiB
#include <bits/stdc++.h>

#define fst first
#define snd second
#define pb push_back
#define forn(i,a,b) for(int i = a; i < b; i++)
#define SZ(x) (int)x.size()
#define ALL(x) x.begin(),x.end()
#define mset(a,v) memset(a,v,sizeof(a))
#define FIN ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);

using namespace std;
typedef long long ll;

struct E{
	ll s;
	ll e;
	E(ll s=0,ll e=0): s(s), e(e) {}
};

bool operator<(const E &a, const E &b){
	if(a.s<b.s) return true;
	if(a.s>b.s) return false;
	return a.e<b.e;
}

const int MAXN = 100000+5;

ll n,q;
vector<pair<E,ll>> eventS;
vector<E> event;

ll lvl[MAXN];
ll   p[MAXN];


void dfs(ll nd, ll lv , ll pa){

	//	cout<<nd<<'\n';

	lvl[nd]=lv;
	p[nd]=pa;

	ll ind = lower_bound(ALL(eventS),(pair<E,ll>){E(event[nd].s,event[nd].e),0})-eventS.begin();
	if(eventS[ind].snd==nd) ind++;
	if(ind<SZ(eventS)){
	ind = eventS[ind].snd;
	
	if(event[ind].s<=event[nd].e){
		dfs(ind,lv+1,pa);
	}
	}
}



int main(){

	cin >> n >> q;
	
	event.clear();
	event.resize(n);
	eventS.clear();
	eventS.resize(n);
	
	forn(i,0,n){
		cin >> event[i].s >> event[i].e;
	}
	
	forn(i,0,n){
		eventS[i].fst=event[i];
		eventS[i].snd=i;
	}
	
	sort(ALL(eventS));

	//cout<<"llega\n";
	forn(i,0,n) p[i]=-1;
	
	forn(i,0,n) if(p[eventS[i].snd]==-1){
		dfs(eventS[i].snd,0,eventS[i].snd);
	}
	//cout<<"pasa\n";
	ll a,b;
	forn(i,0,q){
		cin>>a>>b; a--; b--;
		if(p[a]!=p[b]||lvl[a]>lvl[b]){
			cout<<"impossible\n";
		}else{
			cout<<lvl[b]-lvl[a]<<'\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...