제출 #1316300

#제출 시각아이디문제언어결과실행 시간메모리
1316300penguin133Event Hopping (BOI22_events)C++17
30 / 100
70 ms12364 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

int n, q, par[20][100005];
pair <int, pair <int, int> > a[100005];
int s[100005], e[100005];

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
	cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].second.first >> a[i].first, a[i].second.second = i;
        s[i] = a[i].second.first;
        e[i] = a[i].first;
    }
    sort (a + 1, a + n + 1, greater<>());
    priority_queue<pair <int, pair <int, int> > > pq;
    for (int i = 1; i <= n; i++) {
        while (!pq.empty() && pq.top().second.first > a[i].first) pq.pop();
        if (!pq.empty()) {
            par[0][a[i].second.second] = pq.top().second.second;
        }
        else par[0][a[i].second.second] = 0;
        pq.push(a[i]);
    }
    for (int i = 1; i <= 19; i++) {
        for (int j = 1; j <= n; j++) par[i][j] = par[i - 1][par[i - 1][j]];
    }
    while (q--) {
        int l, r; cin >> l >> r;
        if (l == r) {
            cout << 0 << '\n';
            continue;
        }
        else if (s[r] <= e[l] && e[l] <= e[r]) {
            cout << 1 << '\n';
            continue;
        }
        int cur = l, ans = 0;
        for (int i = 19; i >= 0; i--) {
            int x = par[i][cur];
            if (!x) continue;
            if (e[x] > e[r]) continue;
            if (e[x] < s[r]) ans += (1<<i), cur = x;
        }
        if (par[0][cur]) {
            cur = par[0][cur];
            if (e[cur] >= s[r] && e[cur] <= e[r]) cout << ans + 2 << '\n';
            else cout << "impossible\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...