Submission #583648

#TimeUsernameProblemLanguageResultExecution timeMemory
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...