제출 #636973

#제출 시각아이디문제언어결과실행 시간메모리
636973danikoynovRailway Trip 2 (JOI22_ho_t4)C++14
16 / 100
2082 ms3580 KiB
/** ____ ____ ____ ____ ____ ____ ||l |||e |||i |||n |||a |||d || ||__|||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\|/__\| **/ #include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn = 1e5 + 10; struct road { int a, b; } r[maxn]; struct interval { int l, r, idx; interval(int _l = 0, int _r = 0, int _idx = 0) { l = _l; r = _r; idx = _idx; } bool operator < (const interval &it) const { return make_pair(l, r) < make_pair(it.l, it.r); } }; int n, k, m, q; bool on_train(int pos, int idx) { if (r[idx].a < r[idx].b) { return (pos >= r[idx].a && pos <= r[idx].a + k - 1); } else { return (pos >= r[idx].a - k + 1 && pos <= r[idx].a); } } int to_left[maxn], to_right[maxn]; int solve_query(int s, int t) { int lf = s, rf = s, len = 0, nlf = min(lf, to_left[lf]), nrf = max(rf, to_right[rf]); while(true) { if (lf <= t && rf >= t) return len; if (nlf == lf && rf == nrf) break; int tlf = nlf, trf = nrf; for (int j = rf + 1; j <= nrf; j ++) { tlf = min(tlf, to_left[j]); trf = max(trf, to_right[j]); } for (int j = nlf; j < lf; j ++) { tlf = min(tlf, to_left[j]); trf = max(trf, to_right[j]); } lf = nlf; rf = nrf; len ++; nlf = tlf; nrf = trf; } return -1; } void solve() { cin >> n >> k; cin >> m; for (int i = 1; i <= n; i ++) { to_left[i] = n + 1; to_right[i] = 0; } for (int i = 1; i <= m; i ++) { cin >> r[i].a >> r[i].b; if (r[i].a < r[i].b) { for (int j = r[i].a; j <= min(n, r[i].a + k - 1); j ++) to_right[j] = max(to_right[j], r[i].b); } else { for (int j = r[i].a; j >= max(1, r[i].a - k + 1); j --) to_left[j] = min(to_left[j], r[i].b); } } cin >> q; for (int i = 1; i <= q; i ++) { int s, t; cin >> s >> t; int ans = solve_query(s, t); cout << ans << endl; } } int main() { speed(); solve(); return 0; } /** 5 2 2 5 1 3 5 1 5 3 */
#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...