题目
思路
因为最大的矩形面积其实是取决于连续矩形块中面积最小的那一个,所以我们遍历这n个矩形,每次遍历过程中选取当前遍历的矩形面积为最小值,统计连续个数然后记录下来最大面积即可。比如例题中的矩形面积为5,向前遍历比连续它大的只有6后面没有,总面积为10。而面积为2的矩形,向前遍历有6,5;向后遍历有3,因此矩形面积为(2+1+1)* 2 = 8。
代码
#include <iostream>
#include <algorithm>
using namespace std;
const int maxN = 1010;
int A[maxN];
int main() {
int n, maxS = 0;
cin >> n;
for ( int i = 0; i < n; i++ ) cin >> A[i];
for ( int i = 0; i < n; i++ ) {
int cntpre = 0, cntpost = 0;
for ( int pre = i - 1; pre >= 0 && A[i] <= A[pre]; pre--, cntpre++ );//向前遍历统计比当前矩形大的个数
for ( int post = i + 1; post < n && A[i] <= A[post]; post++, cntpost++ );//向后统计个数
maxS = max(maxS, (cntpre + cntpost + 1) * A[i]);
}
cout << maxS;
return 0;
}
``