#include<cstdio>
#include<cstring>
#define INF 0x3f3f3f3f
using namespace std;
int d[100010],l[100010],r[100010];
long long sum[100010];
int main(){
int n,t=0;
while(scanf("%d",&n)==1){
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++){
scanf("%d",&d[i]);
sum[i]=sum[i-1]+d[i];
l[i]=r[i]=i;
}
d[0]=d[n+1]=-1000000000;
for(int i=1;i<=n;i++)
while(d[l[i]-1] >= d[i]) l[i]=l[l[i]-1];
for(int i=n;i>=1;i--)
while(d[r[i]+1] >= d[i]) r[i]=r[r[i]+1];
int resl=1,resr=1;
long long res=0;
for(int i=1;i<=n;i++){
long long t=d[i]*(sum[r[i]]-sum[l[i]-1]);
if(t>res){
res=t;
resl=l[i];
resr=r[i];
}
}
if(t)
printf("\n");
t++;
printf("%lld\n%d %d\n",res,resl,resr);
}
}
uva 1619 单调 求一段序列和 和 其中最小值的乘积的最大值
最新推荐文章于 2021-04-17 14:47:58 发布