hdu 1506 (dp) Largest Rectangle in a Histogram

来源:互联网 发布:uglify python 编辑:程序博客网 时间:2024/05/09 11:22

一直long long 过不去。。。然后,改成__int64竟然过了。。。

1505的减弱版。。

分别计算a[i]点的左右比它高的所有相邻的点的长度就可以了。

用l[i],r[i]表示左右的长度。

a[l[i]-1]>=a[i]     l[i]=l[l[i]-1];

a[r[i]+1]>=a[i]   r[i]=r[r[i]+1];


#include <iostream>using namespace std;__int64 l[100005],r[100005];__int64 a[100005];int main(){int n;while(scanf("%d",&n)==1&&n){for(int i=0;i<n;i++)l[i]=r[i]=i;for(int i=0;i<n;i++){scanf("%I64d",&a[i]);while(l[i]-1>=0&&a[l[i]-1]>=a[i])l[i]=l[l[i]-1];}for(int i=n-2;i>=0;i--)while(r[i]+1<n&&a[r[i]+1]>=a[i])r[i]=r[r[i]+1];__int64 max=0;for(int i=0;i<n;i++)if((r[i]-l[i]+1)*a[i]>max)max=(r[i]-l[i]+1)*a[i];printf("%I64d\n",max);}return 0;}


	
				
		
原创粉丝点击