Fusión de K Listas Ordenadas S84123


Statement
 

pdf   zip   tar

Dadas KK listas de enteros, cada una ordenada en orden descendente, hay que fusionarlas todas en una sola lista, también en orden descendente.

La estrategia consiste en usar un max-heap que almacena pares (valor, índice de lista). Inicialmente, se inserta el primer elemento de cada lista en el heap junto con el índice de la lista de la que proviene. En cada paso, se extrae el máximo del heap, se añade al resultado, y se inserta el siguiente elemento de la misma lista (si lo hay). De esta manera, el heap siempre contiene como máximo KK elementos y el proceso es eficiente.

Haz una función con la cabecera

/**
 * @brief Fusiona K listas ordenadas descendentemente en una sola
 * lista ordenada descendentemente.
 *
 * @param llistes Vector de K listas, cada una ordenada
 * descendentemente.
 * @pre Cada lista de `llistes` está ordenada en orden descendente.
 * @post Retorna una lista con todos los elementos de todas las
 * listas, ordenada descendentemente.
 */
list<int> fusiona_llistes(
    const vector<list<int>>& llistes
);

Entrada

La primera línea contiene un entero KK (el número de listas). A continuación hay KK líneas, cada una con una lista no vacía de enteros en orden descendente, separados por espacios.

Salida

Una sola línea con todos los enteros fusionados en orden descendente, separados por espacios.

Observación

En los ficheros públicos (icono del gatito) encontrarás: main.cc (el programa principal, con la entrada/salida hecha), fusio.cc (donde hay que implementar la función), heap.hh, assert.hh y un Makefile.

Hay que implementar fusiona_llistes en el fichero fusio.cc y enviar solo ese fichero.

Public test cases
  • Input

    3
    10 7 3 1
    9 5 2
    8 6 4
    

    Output

    10 9 8 7 6 5 4 3 2 1
    
  • Input

    2
    15 10 5
    12 8 3 1
    

    Output

    15 12 10 8 5 3 1
    
  • Information
    Author
    Pau Fernández
    Language
    Spanish
    Translator
    Pau Fernández
    Original language
    Catalan
    Other languages
    Catalan
    Official solutions
    C++
    User solutions
    C++