[CCF]201312-3最大的矩形

#include
using namespace std;
int a[1001]={0};
int main()
{
	int n;
	cin>>n;
	for(int i=0;i>a[i];
	}
	int max=n,cnt=1,cur=0;
	for(int i=0;i=a[i])
			cnt++;
			else
			break;
		}
		for(int j=i-1;j>=0;j--)
		{
			if(a[j]>=a[i])
			cnt++;
			else
			break;
		}
		cur=cnt*a[i];
		cnt=1;
		max=cur>max?cur:max;
	}
	cout<

[CCF]201312-3最大的矩形_第1张图片 

思考一下可以发现,对于每一条柱子 i 来说,假设它是必取的,那么能围成的最大面积就是:左右两边高于或等于它自身的、连续的柱子条数,乘上这条柱子的面积 a[i] 。

那么只要遍历一遍,计算每一条柱子能围成的最大面积,然后取其中的最大值即可。

你可能感兴趣的:(题解,c++)