直方图中最大的矩形
作者:
L_566
,
2024-03-25 19:52:34
,
所有人可见
,
阅读 2
单调栈
#include <bits/stdc++.h>
using namespace std;
const int N=100010;
typedef long long LL;
int h[N],l[N],r[N],q[N];
int main()
{
int n;
while(cin>>n,n)
{
for(int i=1;i<=n;i++)
{
cin>>h[i];
}
h[0]=h[n+1]=-1;
int tt=0;
q[0]=0;
for(int i=1;i<=n;i++)
{
while(h[q[tt]]>=h[i]) tt--;
l[i]=q[tt];
q[++tt]=i;
}
tt=0;
q[++tt]=n+1;
for(int i=n;i;i--)
{
while(h[q[tt]]>=h[i]) tt--;
r[i]=q[tt];
q[++tt]=i;
}
LL res=0;
for(int i=1;i<=n;i++)
res=max(res,(LL)h[i]*(r[i]-l[i]-1));
cout<<res<<endl;
}
return 0;
}