Alexandru este foarte pasionat de cuburi. Într-o zi, acesta a creat un zid format din N
turnuri de cuburi, turnul i
fiind alcătuit din H[i]
cuburi puse unul peste altul. Având acest zid, el își pune următoarea întrebare: Dacă aș porni de la un zid “gol” cu N
turnuri (gol înseamnă ca H[i] = 0
pentru orice 1 ≤ i ≤ N
) iar singura operație pe care o pot face este să aleg doi indici i
și j
cu 1 ≤ i ≤ j ≤ N
și să pun câte un cub peste fiecare turn în intervalul i
și j
, care este numărul minim de astfel de operații ce trebuie efectuate pentru a obține zidul inițial?
Cerința
Lui Alexandru i s-a părut banală problema așa că te provoacă și pe tine să o rezolvi.
Date de intrare
Fișierul de intrare mcub.in
conține pe prima linie numărul N
, iar pe a doua linie N
numere naturale ce reprezintă înălțimile fiecărui turn al zidului.
Date de ieșire
Fișierul de ieșire mcub.out
va conține pe prima linie numărul S
, reprezentând răspunsul întrebării puse de Alex.
Restricții și precizări
1 ≤ N ≤ 100.000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
1.000.000
Exemplu
mcub.in
5 1 0 3 1 2
mcub.out
5
#include <bits/stdc++.h> using namespace std; ifstream cin("mcub.in"); ofstream cout("mcub.out"); long long n , h , hmax , rez; int main() { cin >> n; for(int i = 1 ; i <= n ; i++) { hmax = h; cin >> h; if(h > hmax) rez += h - hmax; } cout << rez; return 0; }