Submission #745893

#TimeUsernameProblemLanguageResultExecution timeMemory
745893vjudge1Event Hopping (BOI22_events)C++17
0 / 100
113 ms10772 KiB
#include <iostream> #include <vector> #include <algorithm> #include <set> using namespace std; struct event { int st, en, id; }; const int maxn = 100010; int nxt[maxn][20]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, q; cin >> n >> q; vector<event> e(n+1); for (int i = 1; i <= n; i++) { cin >> e[i].st >> e[i].en; e[i].id = i; } e.push_back({ (int)1e9+1, (int)1e9 + 1 }); for (int i = 0; i < 20; i++) { nxt[n + 1][i] = n + 1; } vector<int> pos(n + 1); sort(e.begin()+1, e.end(), [](event& a, event& b) {return a.en < b.en; }); int mn = n + 1; for (int i = n; i > 0; i--) { pos[e[i].id] = i; /*int l = i, r = n + 2; while (l + 1 < r) { int m = (l + r) / 2; if (e[m].st <= e[i].en)l = m; else r = m; }*/ nxt[i][0] = (e[mn].st <= e[i].en ? mn : i); for (int j = 1; j < 20; j++) { nxt[i][j] = nxt[nxt[i][j - 1]][j - 1]; } if (e[i].st < e[mn].st)mn = i; } for (int i = 0; i < q; i++) { int s, e; cin >> s >> e; s = pos[s]; e = pos[e]; if (e == s) { cout << "0\n"; continue; } if (e < s) { cout << "impossible\n"; continue; } int ans = 0; for (int i = 19; i >= 0; i--) { if (nxt[s][i] < e) { ans += (1 << i); s = nxt[s][i]; } } if (nxt[s][0] != e) { cout << "impossible\n"; continue; } cout << ans + 1 << '\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...