#include <bits/stdc++.h>
template<typename T>
bool minimize(T &x, T y) {
if (x > y) {
x = y;
return true;
}
return false;
}
template<typename T>
bool maximize(T &x, T y) {
if (x < y) {
x = y;
return true;
}
return false;
}
const int MOD = 998244353;
template<typename T>
void add(T &x, T y) {
x += y;
if (x >= MOD) x -= MOD;
if (x < 0) x += MOD;
}
template<typename T>
T bin_pow(T x, T y) {
T res = 1;
while (y) {
if (y & 1)
res = 1ll * res * x % MOD;
x = 1ll * x * x % MOD;
y >>= 1;
}
return res;
}
int divi(int x, int y) {
return x * bin_pow(y, MOD - 2) % MOD;
}
#define fi first
#define se second
#define pii std::pair<int, int>
#define ld long double
const int maxn = 2e5 + 5;
int n;
int a[maxn + 5];
ld pref[maxn + 5];
int cnt[maxn + 5];
std::vector<std::pair<ld, int>> vec;
void solve() {
std::cin >> n;
for (int i = 1; i <= n; ++i) std::cin >> a[i];
for (int i = 1; i <= n; ++i) {
pref[i] = pref[i - 1] + a[i];
}
ld avg = pref[n] / n;
for (int len = 1; len <= n; ++len) {
int l = len, r = n - 1, pos = n;
while (l <= r) {
int mid = (l + r) >> 1;
ld val = (pref[mid] - pref[mid - len]) / len;
if (val < avg) {
pos = mid;
l = mid + 1;
} else {
r = mid - 1;
}
}
vec.push_back({(pref[pos] - pref[pos - len]) / len, len});
if (pos < n)
vec.push_back({(pref[pos + 1] - pref[pos - len + 1]) / len, len});
}
sort(vec.begin(), vec.end());
int cur = 0;
ld ans = -1;
for (int i = 0, pos = 0; i < (int)vec.size(); ++i) {
while (pos < (int)vec.size() && cur < n) {
int vt = vec[pos].se;
if (!cnt[vt]) cur++;
cnt[vt]++;
pos++;
}
if (cur == n) {
ld val = vec[pos - 1].fi - vec[i].fi;
if (ans == -1) ans = val;
else ans = std::min(ans, vec[pos - 1].fi - vec[i].fi);
}
cnt[vec[i].se]--;
if (!cnt[vec[i].se])
cur--;
}
std::cout << std::fixed << std::setprecision(9) << ans << '\n';
}
int main() {
// std::freopen("input.txt", "r", stdin);
// std::freopen("i.inp", "r", stdin);
// std::freopen("sushi.out", "w", stdout);
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
// clock_t start = clock();
int tc = 1;
// std::cin >> tc;
while (tc--)
solve();
// std::cerr << "Time elapsed: " << clock() - start << " ms\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... |