洛谷 P2422 良好的感觉

P2422 良好的感觉

题目描述

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>
#define ll long long
#define inf 1<<30
#define maxn 10000000
using namespace std;
int n,a[maxn];
ll f[maxn];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        f[i]=a[i];
        for(int j=i-1;j>=1;j--)
        {
            if(a[j]>=a[i])    f[i]+=a[j];
            else break;
        }
        for(int j=i+1;j<=n;j++)
        {
            if(a[j]>=a[i])    f[i]+=a[j];
            else break;
        }
        f[i]=f[i]*a[i];
        ans=max(ans,f[i]);
    }
    printf("%lld",ans);
    return 0;
}
posted @ 2017-09-01 17:47  Alex丶Baker  阅读(161)  评论(0编辑  收藏  举报