This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
const int N = 202020;
int n; ll a[N], psum[N];
int main() {
cin.tie(0); ios_base::sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
psum[i] = psum[i - 1] + a[i];
}
vector<pair<ld, ld>> v(n);
for (int i = 1; i <= n; i++) {
int L = 0, R = i - 1;
while (L < R) {
int M = (L + R + 1) / 2;
if ((ld)(psum[M + n + 1 - i] - psum[M]) / (n + 1 - i) <= (ld)psum[n] / n)
L = M;
else
R = M - 1;
}
v[i - 1].first = (ld)(psum[L + n + 1 - i] - psum[L]) / (n + 1 - i);
L = 0; R = i - 1;
while (L < R) {
int M = (L + R) / 2;
if ((ld)(psum[M + n + 1 - i] - psum[M]) / (n + 1 - i) >= (ld)psum[n] / n)
R = M;
else
L = M + 1;
}
v[i - 1].second = (ld)(psum[L + n + 1 - i] - psum[L]) / (n + 1 - i);
}
sort(v.begin(), v.end());
ld maxv = (ld)psum[n] / n;
ld ans = 1e12;
for (auto [x, y] : v) {
ans = min(ans, maxv - x);
maxv = max(maxv, y);
}
cout.precision(15);
cout << fixed << ans;
}
# | 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... |