题目描述
最近,afy决定给HNUC印刷广告,广告牌是刷在城市的建筑物上的,城市里有紧靠着的N个建筑。afy决定在上面找一块尽可能大的矩形放置广告牌。我们假设每个建筑物都有一个高度,从左到右给出每个建筑物的高度H1,H2…HN,且0<Hi<=1,000,000,000,并且我们假设每个建筑物的宽度均为1。
输入
输入由多组数据组成,每组数据第一行是N,且N <= 1,000,000。接下来N行每行一个数字,依次为Hi。
输出
对于每组数据,输出一行,表示广告牌的最大面积。
样例输入
5
30
60
50
45
55
样例输出
180
【代码】
#include <stdio.h>
#define N 1005
main()
{
double a[N];
double maxArea=0.0,area;
int left,right;
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf",&a[i]);
for(i=0;i<n;i++)
{
left=i-1; //从左边循环
right=i+1; //从右边循环
while(left>=0&&a[left]>=a[i])
left--;
left++; //左边加一次回到原来的位置
while(right<n&&a[right]>=a[i])
right++;
right--; //右边减一次回到原来的位置
area=(right-left+1)*a[i];
if(area>maxArea)
maxArea=area;
}
printf("%.0lf\n",maxArea);
}