题目描述
描述
一张半边参差不齐的网格纸(网格边长均为1),有一边是完整没有破损的。现要从中剪出一片面积最大的矩形纸片。
给定网格纸中完整边的长度N(1≤N≤1000000),以及网格中每一列残存部分的高度(1≤高度≤10000),输出能够剪出的最大矩形纸片面积。
例如: N=6,每一列残存部分的高度依次为3、2、1、4、5、2,如下图所示:
可以发现,沿着红色框可以剪出的矩形纸片面积最大,为8,所以输出8.
输入
第一行输入一个正整数N(1≤N≤1000000),表示纸片完整边的长度;
第二行输入N个正整数(1≤正整数≤10000),表示每列格子残存部分的高度,两个正整数之间用一个空格隔开。
输出
输出一个正整数,表示能够剪出的最大矩形纸片面积。
样例输入
6
3 2 1 4 5 2
样例输出
#include<bits/stdc++.h>
using namespace std;
int main()
{
int result=0;
int n;
cin>>n;
int arr[n+10];
for (int i=0;i<n;i++)
cin>>arr[i];
for (int i=0;i<n;i++)
{
int height=arr[i];
for (int j=i;j<=n;j++)
{
if (arr[j]<height)
height=arr[j];
result=fmax(result,(j-i+1)*height);
}
}
cout<<result;
return 0;
}
8