2033 - MCub

From Bitnami MediaWiki

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>