제출 #745896

#제출 시각아이디문제언어결과실행 시간메모리
745896vjudge1Event Hopping (BOI22_events)C++17
10 / 100
86 ms13888 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 || (a.en==b.en && a.st < b.st); }); 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].en == e[E].en) { cout << "1\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...