您的位置:首页 > 其它

HDU - 1506 Largest Rectangle in a Histogram

2014-04-02 18:58 393 查看
题意:求最大的矩形面积

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

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: