https://www.acwing.com/problem/content/133/
求柱状图最大矩形面积
#include<bits/stdc++.h>
using namespace std;
long long a[120000];
long long sta[12000],l[120000],r[120000];
int main()
{
long long i,j,m,n,left,right,tail,ans;
while(scanf("%lld",&n)!=EOF)
{
if(n==0)
break;
tail = -1;
for(i = 1; i<=n; i++)
{
scanf("%lld",&a[i]);
}
tail = -1;
a[0] = -1;
sta[++tail] = 0;
for(i = 1; i<=n; i++)
{
while(a[sta[tail]]>=a[i])
tail--;
l[i] = sta[tail]+1;
sta[++tail] = i;
}
tail = -1;
a[n+1] = -1;
sta[++tail] = n+1;
for(i = n; i>=1; i--)
{
while(a[sta[tail]]>=a[i])
tail--;
r[i] = sta[tail]-1;
sta[++tail] = i;
}
ans = 0;
for(i = 1; i<=n; i++)
{
ans = max(ans,a[i]*(r[i]-l[i]+1));
}
printf("%lld\n",ans);
}
return 0;
}