Informatică, întrebare adresată de Junko912, 8 ani în urmă

#2084 de pe pbinfo
IT -istul Ghită vă propune următoarea problemă:
pe o platformă sunt montate pe poziții consecutive n bare verticale de lățime 1cm (vezi exemplul). Vom presupune că platforma este mărginită față/spate de ziduri transparente de înălțime infinită. Cantitatea de apă ce poate fi reținută într-o unitate de volum (1cm x 1cm x 1cm) este de 1 mililitru.

Cerința
Determinați cantitatea maximă de apă reținută (exprimată în mililitri).

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații, ce reprezintă înălțimile barelor.

Date de ieșire
Programul va afișa pe ecran numărul W, ce reprezintă cantitatea de apă ce poate fi reținută.

Restricții și precizări
2 ≤ n ≤ 100.000
cele n numere citite vor fi mai mici decât 1.000
Exemple:
Intrare

6
3 0 0 2 0 4
Ieșire

10

Intrare
12

0 1 0 2 1 0 1 3 2 1 2 1
Ieșire

6

Răspunsuri la întrebare

Răspuns de pmarian98
4

#include<bits/stdc++.h>

using namespace std;

 

int main()

{

   int n,v[100001],mst[100001],mdr[100001],aux=0,w=0;

   cin>>n;

   for(int i=1;i<=n;i++)

   {

       cin>>v[i];

       if(v[i]>aux)

           aux=v[i];

       mst[i]=aux;

   }

   aux=0;

   for(int i=n;i>=1;i--)

   {

       if(v[i]>aux)

           aux=v[i];

       mdr[i]=aux;

   }

   for(int i=2;i<n;i++)

       if(v[i]<min(mst[i],mdr[i]))

       {

       w+=(min(mst[i],mdr[i])-v[i]);

       v[i]=min(mst[i],mdr[i]);

       }

   cout<<w;

   return 0;

}

Alte întrebări interesante