Problem Description
给你n个连续的宽为1的长方形,高为a[i]。
完美矩形指的就是:所给图形里面包含最大面积的矩形。
输出完美矩形的面积。
Input
第一行给你一个正整数 n(1<=n<=1e5),第二行给你 n 个正整数 ai,分别代表第 i 个长方形的高度。
Output
输出完美矩形的面积
Sample Input
7
2 1 4 5 1 3 3
Sample Output
8
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,l[100010],r[100010],s[100010],top=0;
long long a[100010];
cin >> n;
for(int i=1; i<=n; i++)
{
cin >> a[i];
}
l[1]=0;
top=0;
for(int i=2; i<=n; i++)
{
if(a[i]>a[i-1])
{
l[i]=i-1;
top++;
s[top]=i-1;
}
else
{
while(top)
{
if(a[i]<=a[s[top]])
{
top--;
}
else
{
l[i]=s[top];
break;
}
}
if(!top)
{
l[i]=0;
}
}
}
r[n]=n+1;
top=0;
for(int i=n-1; i>=1; i--)
{
if(a[i]>a[i+1])
{
r[i]=i+1;
top++;
s[top]=i+1;
}
else
{
while(top)
{
if(a[i]<=a[s[top]])
top--;
else
{
r[i]=s[top];
break;
}
}
if(!top)
{
r[i]=n+1;
}
}
}
long long ma=a[1]*(r[1]-l[1]-1);
for(int i=2; i<=n; i++)
{
if(a[i]*(r[i]-l[i]-1)>ma)
{
ma=a[i]*(r[i]-l[i]-1);
}
}
cout << ma;
return 0;
}