7 条题解

  • 2
    @ 2022-1-19 16:08:02

    C++:

    #include

    #include

    #include

    using namespace std;

    int q[100001];

    int a[100001];

    int n,t;

    int ll;

    //int h[100001];

    int l[100001];

    int r[100001];

    void make(int an[100001])

    { //int l=1;

    ll=0;
    
    a[0]=-1;
    
    for(int i=1;i<=n;i++)
    
    {
    
    	while(a[q[ll]]>=a[i])
    
    	{
    
    		ll--;
    
    	}
    
    	an[i]=q[ll];
    
    	q[++ll]=i;
    
    }
    

    }

    long long maxn;

    int main()

    {

    while(scanf("%d",&n))
    
    {
    
    	if(n==0)
    
    	{
    
    		return 0;
    
    	}
    
    	for(int i=1;i<=n;i++)
    
    	{
    
    		scanf("%d",&a[i]);
    
    	}
    
    	a[0]=-1;
    
    	make(l);
    
    	reverse(a+1,a+1+n);
    
    	make(r);
    
    	//int j=n;
    
    	maxn=0;
    
    	for(int i=1,j=n;i<=n;i++,j--)
    
    	{
    
    		maxn=max(maxn,a[i]*(n-l[j]-r[i]+1-(long long)(1)));
    
    	//	j--;
    
    	}
    
    	printf("%lld\n",maxn);
    
    }
    

    }

    信息

    ID
    42
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    221
    已通过
    89
    上传者