Un vector Montaña es un vector de enteros que tiene tres partes: una subida, una meseta y una bajada. La subida es un subvector tal que todos los elementos están en orden estrictamente creciente. La meseta es un subvector en el que todos los elementos son iguales. La bajada es un subvector tal que todos sus valores están en orden estrictamente decreciente.
Además, se cumplen estas dos condiciones:
, y . Dicho de otro modo: tanto la subida como la bajada tienen al menos un elemento, mientras que la meseta tiene, al menos, tres.
y .
Por ejemplo, el vector V = [1 2 3 4 5 5 5 5 4 3 2] es un
vector Montaña:
| $\underbrace{\verb|1 2 3 4|}$ | $\underbrace{\verb|5 5 5 5|}$ | $\underbrace{\verb|4 3 2|}$ |
| subida | meseta | bajada |
El codo Montaña es la posición de un vector Montaña
donde se encuentra
,
es decir, el primer elemento de la meseta. Por ejemplo, para el vector
V = [1 2 3 4 5 5 5 5 4 3 2] la posición del codo Montaña es
4, ya que es la posición donde se encuentra el primer elemento de la
meseta.
Debes hacer la función colzeMuntanya,
que devuelve la posición del codo Montaña de un vector Montaña.
/* PRE: v es un vector Montaña.
POST: devuelve la posición del codo Montaña de v.
*/
int colzeMuntanya(const vector<int>& v);
Solo debes enviar un fichero que contenga la función requerida, con
los include necesarios y las funciones auxiliares que hayas
declarado (si las hay), y nada más.
Propón una solución utilizando búsqueda dicotómica para este ejercicio. Cualquier otro tipo de solución implica la anulación total de todo el ejercicio, independientemente del veredicto del juez.
Un vector Montaña de enteros.
La posición del codo Montaña.
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