题意:求最大的矩形面积
思路:单纯的搜索每个点能拓展的最大的矩形会超时,所以预处理,每个点的,到最左/右的最远的下标,那么矩形的面积就能求出来了,然后找最大值
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 100010;
long long a[MAXN],l[MAXN],r[MAXN];
int n,step,tmp;
int main(){
while (scanf("%d",&n) != EOF && n){
a[0] = 0;
for (int i = 1; i <= n; i++){
scanf("%lld",&a[i]);
l[i] = r[i] = i;
}
for (int i = 1; i <= n; i++)
while (l[i] > 1 && a[l[i]-1] >= a[i])
l[i] = l[l[i]-1];
for (int i = n; i >= 1; i--)
while (r[i] < n && a[r[i]+1] >= a[i])
r[i] = r[r[i]+1];
long long ans = 0;
for (int i = 1; i <= n; i++)
ans = max(ans,(r[i]-l[i]+1)*a[i]);
cout << ans << endl;
}
return 0;
}