注意最后乘法会超int范围,转换为longlong。
#include <iostream>
#include <cstdio>
using namespace std;
int A[100005];
int l[100005];
int r[100005];
int main()
{
int n,i;
while (1)
{
scanf("%d",&n);
if (!n) break;
for (i=0;i<n;i++)
scanf("%d",&A[i]);
long long index;
l[0]=0;
for (i=1;i<n;i++)
{
index=i-1;
while (index>=0 && A[index]>=A[i])
index=l[index]-1;
l[i]=index+1;
}
r[n-1]=n-1;
for (i=n-2;i>=0;i--)
{
index=i+1;
while (index<n && A[index]>=A[i])
index=r[index]+1;
r[i]=index-1;
}
long long maxn=0;
for (i=0;i<n;i++)
if ((long long)(r[i]-l[i]+1)*A[i]>maxn)
maxn=(long long)(r[i]-l[i]+1)*A[i];
cout << maxn << endl;
}
}