欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简化思维,避免模拟

程序员文章站 2022-04-07 19:09:30
...

简化思维,避免模拟
解法:逆向思维,抓住本质,原理在代码注释里。

#include<bits/stdc++.h>
using namespace std;

int a[500005];

int main(){
	long n;
	memset(a,0,sizeof(a));
	scanf("%d\n",&n);
	for(long i=1;i<=n;i++) scanf("%d",&a[i]);
    long maxx=0;
	for(long i=1;i<=n;i++){
//每个数都可能是最小值,那么在此数为最小值得情况下,向左右两侧最大化扩展子序列即可 
		long sum=a[i],min=a[i],left=i-1,right=i+1;
		while(left>=1 && a[left]>=min){//向左扩展 
			sum+=a[left];
			left--;
		}
		while(right<=n && a[right]>=min){//向右扩展 
			sum+=a[right];
			right++;
		}
		maxx=max(maxx,a[i]*sum);
	}
	printf("%d\n",maxx);
} 
相关标签: OJ刷题