51Nod_1102 面积最大的矩形
http://www.51nod.com/Challenge/Problem.html#!#problemId=1102
题目
有一个正整数的数组,化为直方图,求此直方图包含的最大矩形面积。例如 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
分析
枚举每个矩形,将它作为中心,然后以它的高为基准,向左向右扩展,具体看程序。
C++程序
#include<iostream>
using namespace std;
typedef long long ll;
const int N=50000;
int h[N];
int main()
{
int n;
ll s_max=0;
cin>>n;
for(int i=0;i<n;i++)
cin>>h[i];
for(int i=0;i<n;i++)
{
int left=0,right=0;
while((i-left)>0&&h[i-left-1]>=h[i])
left++;
while((i+right)<n-1&&h[i+right+1]>=h[i])
right++;
ll s=(ll)h[i]*(ll)(left+right+1);
s_max=max(s_max,s);
}
cout<<s_max<<endl;
return 0;
}