제출 #583648

#제출 시각아이디문제언어결과실행 시간메모리
583648tutisEvent Hopping (BOI22_events)C++17
10 / 100
1585 ms524288 KiB
/*input
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
*/
#include <bits/stdc++.h>
using namespace std;
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int N, Q;
	cin >> N >> Q;
	pair<pair<int, int>, int>A[N];
	for (int i = 0; i < N; i++)
	{
		cin >> A[i].first.second >> A[i].first.first;
		A[i].second = i;
	}
	sort(A, A + N);
	int p[N];
	for (int i = 0; i < N; i++)
		p[A[i].second] = i;
	int S[N], E[N];
	for (int i = 0; i < N; i++)
	{
		S[i] = A[i].first.second;
		E[i] = A[i].first.first;
	}
	for (int i = 0; i < N; i++)
	{
		//S[i] = upper_bound(E, E + N, S[i]) - E;
	}
	int D[N][N];
	for (int i = 0; i < N; i++)
		for (int j = 0; j < N; j++)
			D[i][j] = N + 10;
	for (int i = N - 1; i >= 0; i--)
	{
		D[i][i] = 0;
		for (int j = i + 1; j < N; j++)
		{
			if (S[j] <= E[i])
				D[i][j] = 1;
			else
			{
				for (int k = i + 1; k < j; k++)
					D[i][j] = min(D[i][j], D[i][k] + D[k][j]);
			}
		}
	}
	while (Q--)
	{
		int s, t;
		cin >> s >> t;
		s = p[s - 1];
		t = p[t - 1];
		int k = D[s][t];
		if (s == t)
		{
			cout << "0\n";
		}
		else {
			if (S[t] <= E[s] && E[s] <= E[t])
				cout << "1\n";
			else {
				if (k > N)
					cout << "impossible\n";
				else
					cout << k << "\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...