F - 郭鑫的难题(三)
Description
郭鑫是一名幼儿园老师。
她想给她班上的孩子们一些糖果。所有的孩子都排成一排,每个孩子都根据其在课堂上的表现得到评分。
她想给每个孩子至少1个糖果。如果两个孩子坐在一起,那么评分较高的孩子必须得到更多的糖果。郭鑫希望尽量减少她必须购买的糖果总数。
例如,假设她的学生的评分为[4,6,4,5,6,2]。她给学生糖果的数量如下:[ 1,2,1,2,3,1 ]。她必须购买至少10个糖果。
现在请你帮助她计算出最少需要的糖果数。
Input
第一行输出一个数 n,代表孩子的数目。
接下来有 n 行,每一行有一个整数 a[i], 代表处在第 i 位置上的孩子的评分。
1 <= n <= 100000 1 <= a[i] <= 100000
Output
输出一个数代表郭鑫最小需要的糖果数。
Sample
Input
3
1
2
2
Output
4
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i,a[100003],b[100003],s=0;
scanf("%d",&n);
for(i=0;i<n;i++)
a[i]=1;
scanf("%d",&b[0]);
for(i=1; i<n; i++)
{
scanf("%d",&b[i]);
if(b[i]>b[i-1])
a[i]=a[i-1]+1;
}
for(i=n-1; i>=1; i--)
{
if(b[i]<b[i-1]&&a[i]>=a[i-1])
a[i-1]=a[i]+1;
}
for(i=0;i<n;i++)
{
s+=a[i];
}
printf("%d",s);
return 0;
}