<p>//最近在做dp题,做了几道背包题,看到这题一开始没有什么思路,因为暴力的方法一定会超时。</p><p>//看完大牛的代码就理解了。</p><p>//先从左到右扫一遍,往左延伸,l[]数组记录长度;再从右往左,往右延伸,r[]数组记录长度。总长度就是l[i]+r[i]-1;</p>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll __int64
ll dp[100010],l[100010],r[100010];
ll n;
int main()
{
while(~scanf("%I64d",&n)&&n)
{
int i;
for(i=1;i<=n;i++)
{scanf("%I64d",&dp[i]);l[i]=r[i]=1;}
ll t;
for(i=2;i<=n;i++)
{
t=i-1;
while(dp[t]>=dp[i]&&t>=1)
{
l[i]+=l[t];
t=t-l[t];
}
}
for(i=n-1;i>=1;i--)
{
t=i+1;
while(dp[t]>=dp[i]&&t<=n)
{
r[i]+=r[t];
t=t+r[t];
}
}
ll ans=0;
for(i=1;i<=n;i++)
{
t=dp[i]*(l[i]+r[i]-1);
if(ans<t) ans=t;
}
printf("%I64d\n",ans);
}
return 0;
}