hdu 1506

#include<stdio.h>//两组数据4 2 2 5 5 结果10
                  //6 2 5 2 5 5 2  结果12
#include<string.h>//求左右大于等于当前数的长度乘于这个数
#define N 101000
__int64 l[N],r[N],a[N];
int main() {
      __int64 n,h,i,ans;
 while(scanf("%I64d",&n),n) {
 for(i=1;i<=n;i++) {
 scanf("%I64d",&a[i]);
 l[i]=i;r[i]=i;
 }
 for(i=2;i<=n;i++) {
 h=i;
 while(a[i]<=a[h-1]&&h>1)
                h=l[h-1];
 l[i]=h;
 }
 for(i=n-1;i>=1;i--)  {
 h=i;
while(a[i]<=a[h+1]&&h<n)
h=r[h+1];
r[i]=h;
 }
ans=0;
for(i=1;i<=n;i++) {
      h=r[i]-l[i]+1;
  h=a[i]*h;
  if(h>ans)
  ans=h;
}
printf("%I64d\n",ans);
}
return 0;
}
posted @ 2014-03-09 11:26  HYDhyd  阅读(95)  评论(0编辑  收藏  举报