Un vector Muntanya és un vector d’enters que té tres parts: una pujada, un pla i una baixada. La pujada és un subvector tal que tots els elements estan en ordre estrictament creixent. El pla és un subvector on tots els elements són iguals. La baixada és un subvector tal que tots els seus valors estan en ordre estrictament decreixent.
A més, es compleixen aquestes dues condicions:
, i . Dit altrament: tant la pujada com la baixada tenen almenys un element, mentre que el pla en té, almenys, tres.
i .
Per exemple, el vector V = [1 2 3 4 5 5 5 5 4 3 2] és un
vector Muntanya:
| $\underbrace{\verb|1 2 3 4|}$ | $\underbrace{\verb|5 5 5 5|}$ | $\underbrace{\verb|4 3 2|}$ |
| pujada | pla | baixada |
El colze Muntanya és la posició d’un vector Muntanya
on es troba
,
és a dir, el primer element del pla. Per exemple, per al vector
V = [1 2 3 4 5 5 5 5 4 3 2] la posició del colze Muntanya
és 4, ja que és la posició on es troba el primer element del pla.
Has de fer la funció colzeMuntanya, que
torna la posició del colze Muntanya d’un vector Muntanya.
/* PRE: v és un vector Muntanya.
POST: torna la posició del colze Muntanya de v.
*/
int colzeMuntanya(const vector<int>& v);
Només has d’enviar un fitxer que contingui la funció requerida, amb
els include necessaris i les funcions auxiliars que hauràs
declarat (si n’hi ha), i res més.
Proposeu una solució utilitzant cerca dicotòmica per aquest exercici. Qualsevol altre tipus de solució implica l’anul·lació total de tot l’exercici, independentment del veredicte del jutge.
Un vector Muntanya d’enters.
La posició del colze Muntanya.
Input
11 1 2 3 4 5 5 5 5 4 3 2 7 -2 2 3 3 3 2 1 5 -2 2 2 2 1 9 -2 6 6 6 5 4 3 2 1
Output
4 2 1 1
Input
10 1 2 3 4 5 6 7 7 7 6 11 1 2 3 4 5 6 7 7 7 7 6
Output
6 6