hrbust I Want Candy 2353

来源:互联网 发布:java基本语法 编辑:程序博客网 时间:2024/06/05 08:52
I Want CandyTime Limit: 1000 MSMemory Limit: 256000 KTotal Submit: 25(8 users)Total Accepted: 8(6 users)Rating: Special Judge: NoDescription

小八被拜托给参加校赛(个人赛)的同学们分发糖果,长老给了n个同学的最终得分,有以下两个要求:

每个同学都至少分得一块糖果;

对于相邻的两个同学,分数高的同学要比分数低的同学分得的糖果多。

本着不要浪费的原则,长老让小八计算出最少需要多少块糖果然后去买...

“长老分明是在考验我小叮当”,还是帮帮小八吧...555...

Input

有多组输入数据,每组数据先输入一个整数n(1≤n≤105),表示有n个参加校赛的同学。接下来一行输入n个整数ai(0≤ai≤105,按顺序给出n位同学的得分。

Output

对于每组输入数据,输出一个数字,表示最少需要的糖果数,每组输出占一行。

Sample Input

3

1 2 2

Sample Output

4

Source“科林明伦杯”哈尔滨理工大学第七届程序设计团队赛(热身)
#include<iostream>#include<string>#include<string.h>#include<cstdio>#include<algorithm>using namespace std;int   a[100005];int   b[100005];int n;int MAx(int a,int b){   return a<b?b:a;}void  init(){    for(int i=0;i<=n+1;i++)    {        b[i]=1;    }}int main(){    while(~scanf("%d",&n))    {        init();        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);        }        for(int i=1;i<=n;i++)        {            int cnt=0;            int k=i;            while(a[k]>a[k+1])            {                if(k<=n-1){                k++;                cnt++;                }                else break;            }            if(cnt){              b[i]=MAx(b[i],cnt+1);            }            if(a[i]<a[i+1])            {                b[i+1]=b[i]+1;            }        }        long sum=0;        for(int i=1;i<=n;i++)        {            sum+=b[i];        }        cout<<sum<<endl;    }}