#include<bits/stdc++.h>
using namespace std;
int n,b[100010],c[100010],d[100010];
long long ans=0,a[100010];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
d[i]=a[i];
}
for(int i=1;i<=n;i++)//向左找第一个比a[i]小的数的位置
{
int j=i-1;
while(1)
{
if(a[i]>a[j])
{
b[i]=j;
break;
}
else if(a[i]==a[j])
{
b[i]=b[j];
break;
}
else
{
j=b[j];
}
if(j==0)break;
}
}
for(int i=n;i>=1;i--)//向右找第一个比a[i]小的数的位置
{
int j=i+1;
while(1)
{
if(a[i]>a[j])
{
c[i]=j;
break;
}
else if(a[i]==a[j])
{
c[i]=c[j];
break;
}
else
{
j=c[j];
}
}
}
for(int i=1;i<=n;i++)
{
a[i]+=a[i-1];
}
for(int i=1;i<=n;i++)//当d[i]为区间最小值
{
ans=max(ans,d[i]*(a[c[i]-1]-a[b[i]]));
}
cout<<ans;
return 0;
}
这种写法在处理什么数据时会TLE