Submission #583653

#TimeUsernameProblemLanguageResultExecution timeMemory
583653tutisEvent Hopping (BOI22_events)C++17
25 / 100
245 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] = (lower_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 j = 0; j < N; j++) { if (S[j] >= j) continue; pair<int, int>mn = { N + 1, N + 1}; for (int i = S[j]; i < j; i++) { D[j][i] = 1; mn = min(mn, {S[i], i}); } for (int i = 0; i < S[j]; i++) D[j][i] = D[mn.second][i] + 1; } while (Q--) { int s, t; cin >> s >> t; s = p[s - 1]; t = p[t - 1]; if (s == t) { cout << "0\n"; } else { if (A[t].first.second <= A[s].first.first && A[s].first.first <= A[t].first.first) cout << "1\n"; else { int k = D[t][s]; 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...