一个直方图有N个数据条,各数据条的宽度都是1,高度分别为[h 1,h 2,...,h N]。
计算这个直方图中存在的矩形的最大面积。
接下来1行有N个数字,各数字之间由1个空格分隔,依次表示这个直方图从左向右的数据条高度h i。
- 1 ≤ N ≤ 105
- 1 ≤ hi ≤ 106
Input
8 2 1 3 5 3 4 2 1
Output
12
hint
Input
5 1 2 3 4 5
Output
9
Input
3 2 0 1
Output
2
/*
思路:遍历以每个元素作为高矩形最大面积。注意每次不是单一方向,而是前后两个方向同时进行
*/
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i = 0; i < n; i++)
cin>>a[i];
int Max=a[0];
for(int i = 1; i < n; i++)
{
int r = i;
int l = i;
while(a[i]<=a[r]&&r<n)r++;
while(a[i]<=a[l]&&l>=0)l--;
int m=a[i]*(r-l-1);
Max=max(m,Max);
}
cout<<Max;
return 0;
}