HDU 1506 Largest Rectangle in a Histogram

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506


重点:从左到右,对于每个点,记算出他所能向左和向右延伸的最大边界


#include
__int64 max,ans;
struct node
{
   int l,r;
   __int64 v;
}a[100010];
int main()
{
   int i,n;
   while(scanf("%d",&n)!=EOF&&n)
   {
       for(i=1;i<=n;i++)
	   {
	        scanf("%I64d",&a[i].v);
			a[i].l=a[i].r=i;
	   }
	   a[0].v=a[n+1].v=-1;
	   for(i=1;i<=n;i++)
	   {
	      while(a[i].v<=a[a[i].l-1].v)//延伸左边界
		  {
		      a[i].l=a[a[i].l-1].l;
		  }
	   }
	   for(i=n;i>=1;i--)
	   {
	      while(a[i].v<=a[a[i].r+1].v)//延伸右边界
		  {
		     a[i].r=a[a[i].r+1].r;
		  }
	   }
	   max=0;
	   for(i=1;i<=n;i++)
	   {
	       ans=a[i].v*(a[i].r-a[i].l+1);
		   if(max


你可能感兴趣的:(HDU/HDOJ,DP,背包,贪心)