对于每一块木板 面积Area=height[i]*(j-k+1) (j<=x<=k height[x]>=height[i]) 利用动态规划找j k 如果它左边高度大于等于它本身 那么它左边的左边界一定满足这个性质 再从这个边界的左边迭代下去
#include<bits/stdc++.h>
using namespace std;
long long h[100020],l[100020],r[100020];
int main()
{
int n;
while(scanf("%d",&n)==1&&n)
{
for(int i=1;i<=n;i++)
{
scanf("%I64d",&h[i]);
l[i]=i;
r[i]=i;
}
for(int i=1;i<=n;i++)
{
while(h[l[i]-1]>=h[i])
l[i]=l[l[i]-1];
}
long long max=0;
for(int i=n;i>=1;i--)
{
while(h[r[i]+1]>=h[i])
r[i]=r[r[i]+1];
if(h[i]*(r[i]-l[i]+1)>max)
max=h[i]*(r[i]-l[i]+1);
}
printf("%I64d\n",max);
}
return 0;
}