제출 #1231437

#제출 시각아이디문제언어결과실행 시간메모리
1231437omsincoconutEvent Hopping (BOI22_events)C++17
25 / 100
1596 ms3424 KiB
#include <bits/stdc++.h>

using namespace std;
const int INF = 1e9;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int N, Q;
    cin >> N >> Q;

    vector<int> S(N+1), E(N+1);
    for (int i = 1; i <= N; i++) cin >> S[i] >> E[i];

    int ord[N+1];
    iota(ord+1, ord+N+1, 1);
    sort(ord+1, ord+N+1, [&E, &S](int a, int b) {return (E[a] > E[b]) || (E[a] == E[b] && S[a] > S[b]);});

    while (Q--) {
        int s, e;
        cin >> s >> e;

        priority_queue<pair<int, int>> pq;
        int ans = INF;
        for (int i = 1; i <= N; i++) {
            while (!pq.empty() && S[pq.top().second] > E[ord[i]]) pq.pop();

            int val;
            if (ord[i] == e) val = 0;
            else val = (pq.empty() ? INF : -pq.top().first)+1;
            pq.emplace(-val, ord[i]);

            if (ord[i] == s) ans = val;
        }

        if (E[s] == E[e]) ans = min(ans, 1);

        if (ans > N) cout << "impossible\n";
        else cout << ans << "\n";
    }


    return 0;
}

/*
5 2
1 3
2 4
4 7
7 9
3 7
1 4
3 2
*/

/*
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
*/
#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...