1102 面积最大的矩形
- 1.0 秒
- 131,072.0 KB
- 20 分
- 3级题
有一个正整数的数组,化为直方图,求此直方图包含的最大矩形面积。例如 2,1,5,6,2,3,对应的直方图如下:
面积最大的矩形为5,6组成的宽度为2的矩形,面积为10。
收起
输入
第1行:1个数N,表示数组的长度(0 <= N <= 50000) 第2 - N + 1行:数组元素A[i]。(1 <= A[i] <= 10^9)
输出
输出最大的矩形面积
输入样例
6 2 1 5 6 2 3
输出样例
10
预处理出每一个点可以延伸到最左边的位置以及右边的位置。
当对每一个位置i处理时,k=i-1,如果ak>=ai,那么k可以直接到l[k]-1,因为l[k]是k可以预处理到的最左边的位置。
右边也一样。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=50000+66;
const ll mod=1e9+7;
int n;
int a[maxn];
int l[maxn];
int r[maxn];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
ll s=0;
for(int i=1;i<=n;i++)
{
int k=i-1;
while(a[k]>=a[i])
k=l[k]-1;
l[i]=k+1;
}
for(int i=n;i>=1;i--)
{
int k=i+1;
while(a[k]>=a[i])
k=r[k]+1;
r[i]=k-1;
}
for(int i=1;i<=n;i++)
{
s=max(s,(ll)a[i]*(r[i]-l[i]+1));
}
printf("%I64d\n",s);
}