有一个正整数的数组,化为直方图,求此直方图包含的最大矩形面积。例如 2,1,5,6,2,3,对应的直方图如下:
面积最大的矩形为5,6组成的宽度为2的矩形,面积为10。
Input
第1行:1个数N,表示数组的长度(0 <= N <= 50000) 第2 - N + 1行:数组元素A[i]。(1 <= A[i] <= 10^9)
Output
输出最大的矩形面积
Input示例
6 2 1 5 6 2 3
Output示例
10
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=55555;
int a[maxn],l[maxn],r[maxn];
int main()
{
int n,i,j;
ll ans;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n;i++) {
l[i]=r[i]=i;
}
l[0]=r[0]=-1;
for(i=1;i<=n;i++) {
while(a[i]<=a[l[i]-1]) l[i]=l[i]-1;
}
for(i=n;i>=1;i--) {
while(a[i]<=a[r[i]+1]) r[i]=r[i]+1;
}
ans=0;
for(i=1;i<=n;i++) {
ans=max(ans,(ll) (r[i]-l[i]+1)*a[i]);
}
cout<<ans<<endl;
return 0;
}