Submission #1343036

#TimeUsernameProblemLanguageResultExecution timeMemory
1343036Jawad_Akbar_JJEvent Hopping (BOI22_events)C++20
0 / 100
1595 ms10740 KiB
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
const int N = 1<<17;
int s[N], e[N], Nxt[N][20];

int main(){
	int n, q;
	cin>>n>>q;

	vector<pair<int, int>> vec;
	for (int i=1;i<=n;i++){
		cin>>s[i]>>e[i];
		vec.push_back({s[i], -i});
		vec.push_back({e[i] + 1, i});
	}

	sort(begin(vec), end(vec));

	int mx = 0, ind;
	for (auto [p, id] : vec){
		// if (id < 0)
		// 	cout<<"Add "<<-id<<' '<<s[-id]<<' '<<e[-id]<<'\n';
		if (id < 0 and mx < e[-id])
			mx = e[-id], ind = -id;
		else if (id > 0)
			Nxt[id][0] = (mx <= e[id] ? id : ind);//, cout<<id<<' '<<ind<<'\n';

		// if (id > 0)
		// 	cout<<"Nxt "<<s[id]<<' '<<e[id]<<' '<<Nxt[id][0]<<'\n';
	}

	for (int j=0;j<18;j++){
		for (int i=1;i<=n;i++)
			Nxt[i][j+1] = Nxt[Nxt[i][j]][j];
	}

	for (int i=1;i<=q;i++){
		int S, E, Ans = 0;
		cin>>S>>E;

		while (e[S] + 1 < s[E] and Ans >= 0){
			if (Nxt[S][0] == S)
				Ans = -3;
			S = Nxt[S][0], Ans++;
		}
		if (Ans >= 0 and e[E] >= e[S])
			cout<<Ans + (S != E)<<'\n';
		else
			cout<<"impossible\n";
	}
}
#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...