HDU - 1506 Largest Rectangle in a Histogram

来源:互联网 发布:知之网官网 编辑:程序博客网 时间:2024/05/21 15:18

题意:求最大的矩形面积

思路:单纯的搜索每个点能拓展的最大的矩形会超时,所以预处理,每个点的,到最左/右的最远的下标,那么矩形的面积就能求出来了,然后找最大值


#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;}



0 0
原创粉丝点击