51Nod 1102 面积最大的矩形

来源:互联网 发布:变种人真的存在吗 知乎 编辑:程序博客网 时间:2024/05/20 21:19
有一个正整数的数组,化为直方图,求此直方图包含的最大矩形面积。例如 2,1,5,6,2,3,对应的直方图如下:


面积最大的矩形为5,6组成的宽度为2的矩形,面积为10。
Input
第1行:1个数N,表示数组的长度(0 <= N <= 50000)第2 - N + 1行:数组元素A[i]。(1 <= A[i] <= 10^9)
Output
输出最大的矩形面积
Input示例
6215623
Output示例
10
#include<stdio.h>#include <algorithm>using namespace std;#define maxn 50055typedef long long ll;int a[maxn],l[maxn],r[maxn];int main() {int n,i,j;ll ans;scanf("%d",&n);for(i=1;i<=n;i++)   scanf("%d",&a[i]);for(i=1;i<=n;i++) {l[i]=r[i]=i;}l[0]=r[0]=-1;for(i=1;i<=n;i++) {while(a[i]<=a[l[i]-1])   l[i]=l[i]-1;}for(i=n;i>=1;i--) {while(a[i]<=a[r[i]+1])   r[i]=r[i]+1;}ans=0;for(i=1;i<=n;i++) {ans=max(ans,(ll)(r[i]-l[i]+1)*a[i]);}   printf("%lld\n",ans);return 0;}


0 0