标签:
Description
Input
Output
Sample Input
7 2 1 4 5 1 3 3 4 1000 1000 1000 1000 0
Sample Output
8 4000
Hint
Huge input, scanf is recommended.
题意:给你一系列的矩形,宽度都为1,高度为h要求出相邻矩形连成的最大矩形面积。
思路:
如果确定了长方形的左端点L和右端点R,那么最大可能的高度就是min{hi|L <= i < R}。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int const maxn=100010;
long long h[maxn],left[maxn],right[maxn];
void solve()
{
int n,temp;
while(scanf("%d",&n)==1&&n)
{
memset(h,0,sizeof(h));
memset(left,0,sizeof(left));
memset(right,0,sizeof(right));
for(int i=1;i<=n;i++)
scanf("%I64d",&h[i]);
for(int i=1;i<=n;i++)
left[i]=right[i]=i;
for(int i=2;i<=n;i++)
{
temp=i;
while(h[temp-1]>=h[i]&&temp>1)
temp=left[temp-1];
left[i]=temp;
}
for(int i=n-1;i>0;i--)
{
temp=i;
while(h[temp+1]>=h[i]&&temp<n)
temp=right[temp+1];
right[i]=temp;
}
long long ans=0;
for(int i=1;i<=n;i++)
{
ans=max((long long )ans,h[i]*(right[i]-left[i]+1));
}
printf("%I64d\n",ans);
}
}
int main()
{
solve();
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a1967919189/article/details/47058965