#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |