题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1506
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <cmath>
#include <sstream>
#include <vector>
using namespace std;
#define REP(i,a,b) for(int i=a;i<=(int)b;i++)
#define REPD(i,a,b) for(int i=a;i>=(int)b;i--)const int maxn=100000+10;
typedef long long LL;
LL l[maxn],r[maxn],h[maxn];
int main(int argc, char const *argv[])
{// freopen("input.in","r",stdin);int n;while(scanf("%d",&n)==1&&n) {REP(i,1,n) cin>>h[i],l[i]=r[i]=i;;REP(i,1,n) {while(l[i]>1&&h[l[i]-1]>=h[i]) l[i]=l[l[i]-1];}REPD(i,n,1) {while(r[i]<n&&h[i]<=h[r[i]+1]) r[i]=r[r[i]+1];}LL ans=-1;REP(i,1,n) ans=max(ans,(LL)(r[i]-l[i]+1)*h[i]);printf("%I64d\n", ans);}return 0;
}