数据好像有点水
查看原帖
数据好像有点水
371818
juruo999楼主2021/7/19 10:12

别的OJ上wa的,洛谷提交AC

#include<cstdio>
#include<iostream>
#include<climits>
#include<algorithm>
#include<stack>
using namespace std;
typedef long long ll;

int n;
ll a[100005],s[100005];
int c[100005],t[100005];
stack<int> q;
ll ans=0;

int main(){
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		s[i]=s[i-1]+a[i];
	}
	n++;
	a[n]=0;
	s[n]=s[n-1];
	
	while(!q.empty()){ q.pop(); }
	q.push(1);
	for(int i=2;i<=n;i++){
		while(!q.empty() && a[q.top()]>a[i]){
			q.pop();
		}
		if(!q.empty())c[i]=q.top();
		q.push(i);
	}
	
	while(!q.empty()){ q.pop(); }
	q.push(n);
	for(int i=n-1;i>=1;i--){
		while(!q.empty() && a[q.top()]>a[i]){
			q.pop();
		}
		if(!q.empty())t[i]=q.top();
		q.push(i);
	}
	
	for(int i=1;i<=n;i++){
		ans=max(ans,a[i]*(s[t[i]-1]-s[c[i]]));
	}
	printf("%lld\n",ans);
	
	return 0;
}
2021/7/19 10:12
加载中...