玄关
  • 板块灌水区
  • 楼主hkl99
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/13 22:17
  • 上次更新2024/11/14 02:30:38
查看原帖
玄关
770439
hkl99楼主2024/11/13 22:17

题目

问:为啥90分

代码:

#include<bits/stdc++.h>
#define N 100010
using namespace std;
long long n,top;
long long a[N],s[N],sum[N],len[N],ans;
int main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		sum[i]=sum[i-1]+a[i];
	}
	for(int i=1;i<=n;i++){
		while(top&&a[s[top]]>=a[i]){
			len[s[top]]=(sum[i-1]-sum[s[top]]);
			top--;
		}
		s[++top]=i;
	}
	top=0;
	s[0]=n+1;
	for(int i=n;i>=1;i--){
		while(top&&a[s[top]]>=a[i]){
			len[s[top]]+=(sum[s[top]]-sum[i]);
			top--;
		}
		s[++top]=i;
	}
	for(int i=1;i<=n;i++){
		ans=max(ans,len[i]*a[i]);
	}
	printf("%lld",ans);
	return 0;
}
2024/11/13 22:17
加载中...