제출 #1173097

#제출 시각아이디문제언어결과실행 시간메모리
1173097domblyEvent Hopping (BOI22_events)C++20
0 / 100
1596 ms6444 KiB
#include <bits/stdc++.h> #define F first #define S second using namespace std; const int N = 1e5 + 10; const int LOG = 17; int n, l[N], r[N], up[N][LOG]; bool cmp(int i, int j) { if(r[i] == r[j]) return l[i] < l[j]; return r[i] < r[j]; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int q; cin >> n >> q; for(int i = 1; i <= n; i++) cin >> l[i] >> r[i]; vector<int> order(n + 1), p(n + 1); for(int i = 1; i <= n; i++) order[i] = i; for(int i = 1; i <= n; i++) p[order[i]] = i; sort(order.begin() + 1, order.end(), cmp); //for(int i = 1; i <= n; i++) cout << l[order[i]] << " " << r[order[i]] << endl; for(int i = 1; i <= n; i++) { int mn = 0; for(int j = 1; j < i; j++) { if(r[order[j]] >= l[order[i]]) { if(mn == 0 || l[order[mn]] > l[order[j]]) mn = j; } } // cout << i << " " << mn << " dbg" << endl; up[i][0] = mn; } for(int j = 1; j < LOG; j++) { for(int i = 1; i <= n; i++) { up[i][j] = up[up[i][j - 1]][j - 1]; } } while(q--) { int l, r; cin >> l >> r; l = p[l]; r = p[r]; if(l == r) { cout << "0\n"; continue; } if(l > r) { cout << "impossible\n"; continue; } int res = 1; for(int j = LOG - 1; j >= 0; j--) { if(up[r][j] > 0 && up[r][j] > l) { res += (1 << j); r = up[r][j]; } } if(up[r][0] > 0 && up[r][0] <= l) { cout << res << "\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...