fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. int n; cin >> n;
  5. vector<long long> a(n+1), pf(n+1,0);
  6. for(int i=1;i<=n;i++) cin >> a[i], pf[i]=pf[i-1]+a[i];
  7. auto q=[&](int l,int r){return (double)(pf[r]-pf[l-1])/(r-l+1);};
  8. double A=q(1,n);
  9. vector<array<double,2>> c={{A,A}};
  10. for(int len=1;len<n;len++){
  11. int L=1,R=n-len+1,p=0;
  12. while(L<=R){
  13. int m=(L+R)/2;
  14. if(q(m,m+len-1)<A) p=m,L=m+1;
  15. else R=m-1;
  16. }
  17. c.push_back({q(p,p+len-1),q(p+1,p+len)});
  18. }
  19. sort(c.begin(),c.end());
  20. double r=1e9,mx=c.back()[0];
  21. for(auto [x,y]:c) r=min(r,mx-x), mx=max(mx,y);
  22. cout << fixed << setprecision(12) << r;
  23. }
Success #stdin #stdout 0.01s 5320KB
stdin
6
1 2 5 6 8 9
stdout
1.166666666667