一张半边参差不齐的网格纸 (网格边长均为1),有一边是完整没有破损的。现要从中剪出一片面积最大的矩形纸片。
给定网格纸中完整边的长度N (1<=N<=1000000) ,以及网格中每一列残存部分的高度(1<=高度<=10000),输出能够剪出的最大矩形纸片面积。
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, mx;
int a[1000009];
int b[1000009];
signed main () {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++) {
b[i] = a[i];
for (int j = i - 1; j >= 1; j--) {
if (a[j] >= a[i]) b[i] += a[i];
else break;
}
for (int j = i + 1; j <= n; j++) {
if (a[j] >= a[i]) b[i] += a[i];
else break;
}
mx = max (mx, b[i]);
}
cout << mx;
return 0;
}