别的OJ上wa的,洛谷提交AC
#include<cstdio>
#include<iostream>
#include<climits>
#include<algorithm>
#include<stack>
using namespace std;
typedef long long ll;
int n;
ll a[100005],s[100005];
int c[100005],t[100005];
stack<int> q;
ll ans=0;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
s[i]=s[i-1]+a[i];
}
n++;
a[n]=0;
s[n]=s[n-1];
while(!q.empty()){ q.pop(); }
q.push(1);
for(int i=2;i<=n;i++){
while(!q.empty() && a[q.top()]>a[i]){
q.pop();
}
if(!q.empty())c[i]=q.top();
q.push(i);
}
while(!q.empty()){ q.pop(); }
q.push(n);
for(int i=n-1;i>=1;i--){
while(!q.empty() && a[q.top()]>a[i]){
q.pop();
}
if(!q.empty())t[i]=q.top();
q.push(i);
}
for(int i=1;i<=n;i++){
ans=max(ans,a[i]*(s[t[i]-1]-s[c[i]]));
}
printf("%lld\n",ans);
return 0;
}