#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define sz(x) (int)(x.size()) #define fi(a,b) for(int i=a;i=b;--i) #define fdj(a,b) for(int j=a-1;j>=b;--j) #define fdo(a,b) for(int o=a-1;o>=b;--o) #define pb push_back #define mp make_pair typedef long long ll; typedef pair pii; typedef pair pll; typedef double ld; typedef vector vi; template bool uin(T &a, T b){ return (a > b ? a = b, true : false); } template bool uax(T &a, T b){ return (a < b ? a = b, true : false); } ///////////////////////////////// int const M = 2e9; int const N = 2e5 + 41; int n; ll ans; vi a; ll suf[N], ds[N]; void solve(){ fdi(n, 0) suf[i] = a[i] + suf[i+1]; ds[n-1] = suf[n-1]; fdi(n-1, 0){ ds[i] = max(suf[i], ds[i+1]); } srand(time(0)); vi p; fi(0, n) p.pb(i); fi(0, 10) random_shuffle(p.begin(), p.end()); int q = 0; fi(0, n){ ll y = 0; ll s = 0; ld dd = 1.0; dd *= ds[p[i]]; dd *= ds[p[i]]; dd *= (n - p[i] + 1); if(dd < (ld) ans) continue; fj(p[i], n){ y += s * a[j]; s += a[j]; uax(ans, y); } q += n - p[i]; if(q > M) return; } } int main(){ #ifdef LOCAL_DEFINE freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); #endif scanf("%d",&n); fi(0, n){ int x; scanf("%d",&x); a.pb(x); } solve(); printf("%lld\n",ans); #ifdef LOCAL_DEFINE fprintf(stderr, "ELAPSED TIME: %.3lf\n", (ld) clock() / CLOCKS_PER_SEC); #endif return 0; }