解题思路:
根据输入的矩形的高度,遍历所有的矩形,找到该矩形左边第一个比其矮的矩形,并记录下来,再从右边找到第一个比起小的矩形也记录下来。通过两个标记的矩形就可以计算得出当前包含当前矩形的最大相邻矩形的宽,乘上当前矩形的高度,就是包含这个矩形的最大相邻矩形的面积。
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
int n;
cin>>n;
int h[n+2];
h[0]=0,h[n+1]=0;
//当前for循环是输入矩形的高度,默认所有的高度记录再左端点
for(int i=1;i<=n;i++)
{
cin>>h[i];
}
int lmin=0,rmin=0,max=0,i,j,width,area=0;
for(i=1;i<=n;i++)
{
//这里开始从左边寻找第一个小于当前矩形高度的矩形
j=i-1;
while(h[j]>=h[i]&&j>0)//j>0是保证不会溢出,i=0时未存放数据
j--;
lmin=j;//进行标记
//接下来从右边开始寻找
j=j+1;
while(h[j]>=h[i]&&j<n+1)
j++;
rmin=j;
width=rmin-lmin-1;//这里减1是因为lmin记录的是左边比起矮的矩形位置,不可计算在内,所以还要减一
area=width*h[i];
if(area>max)
{
max=area;
}
}
cout<<max;
return 0;
}