原 题 警 告

题意描述:

春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为$n$的大厦,

大厦可以看成由$n$块宽度为$1$的积木组成,第i块积木的最终高度需要是$h_i$

在搭建开始之前,没有任何积木(可以看成$n$块高度为$0$的积木)。

接下来每次操作,小朋友们可以选择一段连续区间$[l, r]$,然后将第第 $L$块到第 $R$ 块之间(含第 $L$ 块和第 $R$ 块)所有积木的高度分别增加$1$。

小$M$是个聪明的小朋友,她很快想出了建造大厦的最佳策略,使得建造所需的操作次数最少。

但她不是一个勤于动手的孩子,所以想请你帮忙实现这个策略,并求出最少的操作次数。


输入格式:

包含两行,第一行包含一个整数$n$,表示大厦的宽度。

第二行包含$n$个整数,第$i$个整数为$h_i$


输出格式:

一个整数,表示建造所需的最少操作数。


Input & Output ‘s examples

Input ‘s eg

5
2 3 4 1 2

Output ‘s eg

5


数据范围和约定

对于 $30\% $ 的数据,有$1 ≤ n ≤ 10 $;

对于 $70\% $的数据,有$1 ≤ n ≤ 1000 $;

对于 $100\% $的数据,有$1 ≤ n ≤ 100000,0 ≤ h_i≤ 10000 $


分析

原 题 警 告

其实是一道很水的模拟题……

连数组都不用开……(反正我是没开

不难看出,小朋友们搭积木时是从下向上一排排的搭建。

因此小朋友们搭建的次数完全取决于最高的那一块。

也就是说,只要第$n$块积木没有第$n - 1$块积木高,就可以在搭第$n - 1$块时顺带处理掉。

反之,则要多搭几次。多搭的次数就等于这两块积木的高度差

18年的铺设道路也是如此,只要前一个坑够深,就可以顺带处理掉后边的坑。

所以才说是原题嘛

是不是很简单啊(逃


附件(AC标程)


#include<iostream>

using namespace std;

int n;
int ans;
int next;
int now;

int main(){
cin >> n;
cin >> ans;
now = ans;
for(int i = 2; i <= n; i ++){
cin >> next;
if(next > now){
ans = ans + (next - now);
}
now = next;
}
cout << ans << endl;
return 0;
}
//Writtrn By Payphone-X

THE END