版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42391248/article/details/85221566
正常思路想就好了。
求出每一块的最大面积,在比较出最大值。
时间复杂度大概会比o(n^2)小点,但是最坏情况还是o(n^2),最好情况是o(1),平均下来应该是o(nlog2n)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
#include<string>
using namespace std;
typedef long long ll;
int main()
{
ll n,i,j,a[50005];
cin>>n;
a[0]=0;
a[n+1]=0;
for(i=1;i<=n;i++)
cin>>a[i];
ll ans=0;
stack<ll> s;
for(i=1;i<=n;i++)
{
s.push(a[i]);
j=i+1;
while(a[j]>a[i])//往右找断点
s.push(a[j++]);
j=i-1;
while(a[j]>a[i])//往左找断点
s.push(a[j--]);
ll m=s.size()*a[i];
ans=max(ans,m);
while(!s.empty())//清空栈
s.pop();
}
cout<<ans<<endl;
return 0;
}