Submission #1237023

#TimeUsernameProblemLanguageResultExecution timeMemory
1237023rythm_of_knightBitaro's travel (JOI23_travel)C++17
0 / 100
3096 ms2628 KiB
#include <bits/stdc++.h> #define ar array #define all(x) x.begin(), x.end() using namespace std; typedef long long ll; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; vector <int> x(n + 2); x[n + 1] = 2e9 + 4; x[0] = -1e9 - 4; for (int i = 1; i <= n; i++) cin >> x[i]; vector <ll> ans(n + 2, 1e18); for (int i = 1; i <= n; i++) { ll res = 0; int tl = i, tr = i, cur = i; while (1 < tl || tr < n) { if (tl < 1 || tr > n) return 0; int cnt = 0; int l = 0, r = tl; while (l + 1 < r) { int m = l + r >> 1; if (x[cur] - x[m] <= x[tr + 1] - x[tr]) r = m; else l = m; } if (r < tl) { cnt++; res += x[cur] - x[r]; tl = cur = r; } if (tl < 1 || tr > n) return 0; l = tr, r = n + 1; while (l + 1 < r) { int m = l + r >> 1; if (x[m] - x[cur] < x[tl] - x[tl - 1]) l = m; else { r = m; if (tl == 1) return 0; } } if (l > tr) { cnt++; res += x[l] - x[cur]; tr = cur = l; } // cout << tl << ' ' << tr << '\n'; // if (!cnt && tr < n) // return 0; } ans[i] = res; } int q; cin >> q; while (q--) { int s; cin >> s; int i = lower_bound(all(x), s) - x.begin(); cout << min(ans[i - 1] + s - x[i - 1], ans[i] + x[i] - s) << '\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...