标签:
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