Submission #1316300

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