全场最精华部分 为1到2;
优化时间了很多很多;
#include<stdio.h>
int main()
{
int n;
long long int a[123000],s[123000],l[123000],r[123000];
s[0]=0;
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
s[i]=s[i-1]+a[i];
}
int j;
for(int i=1;i<=n;i++) //1
{
j=i;
while(j>1&&a[j-1]>=a[i])
{
j=l[j-1];
}
l[i]=j;
} //2
for(int i=n;i>=1;i--)
{
j=i;
while(j<n&&a[j+1]>=a[i])
{
j=r[j+1];
}
r[i]=j;
}
long long int ans=-1,L,R;
for(int i=1;i<=n;i++)
{
long long int v=a[i]*(s[r[i]]-s[l[i]-1]);// printf("i:%d %d %d %d\n",i,v,l[i],r[i]);
if(v>ans)
{
ans=v;
L=l[i];
R=r[i];
}
}
printf("%lld\n%lld %lld\n",ans,L,R);
return 0;
}