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; }