Problem:
Score : 300 points

Problem Statement

In a flower bed, there are N flowers, numbered 1,2,......,N. Initially, the heights of all flowers are 0.
You are given a sequence h=\{h_1,h_2,h_3,......\} as input. You would like to change the height of Flower k to h_k for all k (1 \leq k \leq N), by repeating the following "watering" operation:

Specify integers l and r. Increase the height of Flower x by 1 for all x such that l \leq x \leq r.

Find the minimum number of watering operations required to satisfy the condition.

Constraints

1 \leq N \leq 100

0 \leq h_i \leq 100

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
h_1 h_2 h_3 ...... h_N

Output

Print the minimum number of watering operations required to satisfy the condition.

Sample Input 1

4
1 2 2 1

Sample Output 1

2

The minimum number of watering operations required is 2.
One way to achieve it is:

Perform the operation with (l,r)=(1,3).

Perform the operation with (l,r)=(2,4).

Sample Input 2

5
3 1 2 3 1

Sample Output 2

5

Sample Input 3

8
4 23 75 0 23 96 50 100

Sample Output 3

221

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#define REP(i, n) for(int i = 0; i < n; i++)
#define REPR(i, n) for(int i = n; i >= 0; i--)
#define INF 2e9
using namespace std;
typedef long long ll;
void inputVector(vector<int> * p, int a){ REP(i, a){ int input; cin >> input; p -> push_back(input); }}

int main(int argc, const char * argv[]) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n, s = 0; cin >> n;
  vector<int> h;
  inputVector(&h, n);
  int maxv = *max_element(h.begin(), h.end());
  REP(j, maxv) {
    bool is_zero = true;
    int cnt_mnt = 0;
    REP(i, n) {
      if (is_zero == true && h[i] > 0) {
        cnt_mnt ++;
        is_zero = false;
      }
      if (h[i] <= 0) {
        is_zero = true;
      }
    }
    REP(i, n) h[i] --;
    s += cnt_mnt;
  }
  cout << s << endl;
  return 0;
}