Submission #1206093

#TimeUsernameProblemLanguageResultExecution timeMemory
1206093LucasLeSeesaw (JOI22_seesaw)C++20
100 / 100
79 ms20896 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...