2033 - MCub
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[edit | edit source]
Lui Alexandru i s-a părut banală problema așa că te provoacă și pe tine să o rezolvi.
Date de intrare[edit | edit source]
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[edit | edit source]
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[edit | edit source]
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:[edit | edit source]
mcub.in
5 1 0 3 1 2
mcub.out
5
Încărcare soluție[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python"> import sys
sys.stdintxt = open('mcubin.txt', 'r')
sys.stdouttxt = open('mcubout.txt', 'w')
n = int(input())
hmax = 0
rez = 0
for i in range(1, n+1):
hmax = h
h = int(input())
if h > hmax:
rez += h - hmax
print(rez)
</syntaxhighlight>