51Nod1102 面积最大的矩形

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/85221566