func_code_string: #include <bits/stdc++.h>   using namespace std;   int MAXN = 200000;   using namespace std;   void RI() {}   template <typename... T>   void RI(int& head, T&... tail) {     scanf( %d , &head);     RI(tail...);   }   int a[200000];   vector<pair<double, double> > lines;   double intersection(pair<double, double> a, pair<double, double> b) {     double x = (a.second - b.second) / (a.first - b.first);     double y = (a.first * x) - a.second;     return x;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     int n;     RI(n);     for (int i = 0; i < int(n); i++) RI(a[i]);     double c = 0;     lines.push_back(make_pair(0, 0));     for (int i = 0; i < int(n); i++) {       c = c + a[i];       lines.push_back(make_pair(i + 1, c));     }     vector<int> s1;     vector<int> s2;     s1.push_back(n);     s1.push_back(n - 1);     for (int j = n - 2; j >= 0; j--) {       while (1) {         if (s1.size() == 1) {           break;         }         if (intersection(lines[s1[s1.size() - 2]], lines[j]) >=             intersection(lines[s1[s1.size() - 2]], lines[s1[s1.size() - 1]])) {           s1.pop_back();         } else {           break;         }       }       s1.push_back(j);     }     s2.push_back(0);     s2.push_back(1);     for (int j = 2; j <= n; j++) {       while (1) {         if (s2.size() == 1) {           break;         }         if (intersection(lines[s2[s2.size() - 2]], lines[j]) >=             intersection(lines[s2[s2.size() - 2]], lines[s2[s2.size() - 1]])) {           s2.pop_back();         } else {           break;         }       }       s2.push_back(j);     }     int curr_line = 0;     double ans = 1000000000.0;     for (int j = 0; j < s2.size() - 1; j++) {       double inter1 = intersection(lines[s2[j]], lines[s2[j + 1]]);       while (1) {         if (curr_line >= s1.size() - 1) {           break;         }         double inter =             intersection(lines[s1[curr_line]], lines[s1[curr_line + 1]]);         if (inter <= inter1) {           break;         } else {           curr_line++;         }       }       double y1 = (lines[s2[j]].first * inter1) - lines[s2[j]].second;       double y2 =           (lines[s1[curr_line]].first * inter1) - lines[s1[curr_line]].second;       ans = min(abs(y2 - y1), ans);     }     curr_line = 0;     for (int j = 0; j < s1.size() - 1; j++) {       double inter1 = intersection(lines[s1[j]], lines[s1[j + 1]]);       while (1) {         if (curr_line >= s2.size() - 1) {           break;         }         double inter =             intersection(lines[s2[curr_line]], lines[s2[curr_line + 1]]);         if (inter <= inter1) {           break;         } else {           curr_line++;         }       }       double y1 = (lines[s1[j]].first * inter1) - lines[s1[j]].second;       double y2 =           (lines[s2[curr_line]].first * inter1) - lines[s2[curr_line]].second;       ans = min(abs(y2 - y1), ans);     }     printf( %.12f n , ans);     return 0;   }   