Un vector U es un vector de enteros que tiene tres partes: una bajada, un valle y una subida. La bajada es un subvector tal que todos los elementos están en orden estrictamente decreciente. El valle es un subvector en el que todos los elementos son iguales. La subida es un subvector tal que todos sus valores están en orden estrictamente creciente.
Además, se cumplen estas dos condiciones:
, y . Dicho de otro modo: tanto la bajada como la subida tienen al menos un elemento, mientras que el valle tiene, al menos, tres.
y .
Por ejemplo, el vector V = [5 4 3 2 1 1 1 6 7 8 9 10] es
un vector U:
| $\underbrace{\verb|5 4 3 2|}$ | $\underbrace{\verb|1 1 1|}$ | $\underbrace{\verb|6 7 8 9 10|}$ |
| bajada | valle | subida |
El codo U es la posición de un vector U donde se
encuentra
,
es decir, el último elemento del valle. Por ejemplo, para el vector
V = [5 4 3 2 1 1 1 6 7 8 9 10] la posición del codo U es 6,
ya que es la posición donde se encuentra el último elemento del
valle.
Debes hacer la función colzeU, que
devuelve la posición del codo U de un vector U.
/* PRE: v es un vector U.
POST: devuelve la posición del codo U de v.
*/
int colzeU(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 U de enteros.
La posición del codo U.
Input
12 5 4 3 2 1 1 1 6 7 8 9 10 10 3 1 -1 -5 -5 -5 -5 -4 -3 10 5 4 3 3 3 4 10 4 3 3 3 4 5 6 7 8 9
Output
6 6 3 3