良好的感觉

题目描述

kkk做了一个人体感觉分析器。每一天,人都有一个感受值Ai,Ai越大,表示人感觉越舒适。在一段时间[i, j]内,人的舒适程度定义为[i, j]中最不舒服的那一天的感受值 * [i, j]中每一天感受值的和。现在给出kkk在连续N天中的感受值,请问,在哪一段时间,kkk感觉最舒适?

输入格式

第一行为N,代表数据记录的天数

第二行N个整数,代表每一天的感受值

输出格式

一行,表示在最舒适的一段时间中的感受值。

输入输出样例

输入 #1
6
3 1 6 4 5 2
输出 #1
60

说明/提示

样例解释:

kkk最开心的一段时间是第3天到第5天,开心值:(6+4+5)*4=60

对于30%的数据,1<=N<=100

对于70%的数据,1<=N<=2000

对于100%的数据,1<=N<=100000,1<=感受值<=1000000

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn = 6e5 + 10;
int n;
int c[maxn],que[maxn];
ll sum[maxn],dp[maxn];
int main() {
    scanf("%d",&n);
    for(register int i=1;i<=n;++i){
        scanf("%d",c+i);
    }
    int tail=0;
    for(register int i=1;i<=n;++i){
        sum[i]=sum[i-1]+c[i];
        while(c[que[tail]]>=c[i]){
            dp[que[tail]]+=sum[i-1]-sum[que[tail]];
            tail--;
        }
        dp[i]=sum[i]-sum[que[tail]];
        que[++tail]=i;
    }
    ll res=0;
    for(register int i=1;i<=n;++i){
        res=max(res,dp[i]*c[i]);
    }
    printf("%lld\n",res);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/czy-power/p/11393004.html