제출 #1247392

#제출 시각아이디문제언어결과실행 시간메모리
1247392raphaeltfaBitaro's travel (JOI23_travel)C++20
100 / 100
488 ms4196 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int inf = 1e18; int n; vector<int> arr; void preprocess(){ cin >> n;; arr.resize(n + 2); arr[0] = -inf, arr[n + 1] = inf; for(int i = 0; i < n; i++) cin >> arr[i + 1]; } int jump(int l, int mid, int r){ if(l == 0) return arr[n] - mid; if(r == n + 1) return mid - arr[1]; if(mid - arr[l] > arr[r] - mid){ int x = upper_bound(arr.begin(), arr.end(), 2 * mid - arr[l]) - arr.begin() - 1; return arr[x] - mid + jump(l, arr[x], x + 1); } else { int x = lower_bound(arr.begin(), arr.end(), 2 * mid - arr[r]) - arr.begin(); return mid - arr[x] + jump(x - 1, arr[x], r); } } void solve(){ int pos, l, r; cin >> pos; r = upper_bound(arr.begin(), arr.end(), pos) - arr.begin(); l = r - 1; cout << jump(l, pos, r) << endl; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); preprocess(); int test; cin >> test; while(test--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...