Tarefa 7 - Serviço alfandegário

Prazo de entrega recomendado:

Você deve construir um algoritmo que auxilie a selecionar o produto de uma alfândega cujo peso está na mediana de um conjunto.


O serviço de alfândega está encarregado do controle dos alimentos que entraram no país e, por isso, deve fazer uma inspeção de todos os alimentos que serão trazidos. Como a quantidade de alimentos que entra é muito grande e os recursos são limitados, a alfândega deve escolher um grupo de caixas de cada lote que entra para serem inspecionadas. As caixas retiradas do lote são servidas a um programa que determinará quais delas serão inspecionadas. Se alguma dessas caixas for rejeitada, o lote todo será rejeitado.

Para escolher as caixas que serão inspecionadas, é necessário criar um sistema que faça a escolha usando um critério específico. A alfândega decidiu testar muitos critérios diferentes e você recebeu a tarefa de escolher as caixas usando a mediana estatística.

Nesse método, sempre que uma caixa é adicionada ao grupo, uma determinada caixa do grupo é selecionada para inspeção. A caixa do grupo selecionada será aquela cujo peso estiver no meio de todos os pesos do grupo, i.e., será a mediana das caixas quando elas são ordenadas por peso.

Considere que uma caixa pode ser selecionada mais de uma vez para inspeção e que, no caso do número de caixas ser par, devem ser inspecionadas as duas caixas do meio.

Crie um programa selecionar que controle o conjunto de caixas adicionadas e indique as caixas a serem inspecionadas.

Exemplo 1

Entrada

A primeira linha contém a quantidade de caixas que serão inseridas. Cada linha seguinte representa uma caixa a ser inserida, composta por uma string com até 20 caracteres que representa o nome do produto e um inteiro que representa o o peso do produto.

2
mango 2
apple 3

Saída

Para cada caixa adicionada no grupo, deverão ser impressos o nome e o peso do(s) produto(s) selecionado(s) para inspeção, conforme o exemplo abaixo.

mango: 2
mango: 2
apple: 3

Uma ilustração para esse caso é a seguinte.

Exemplo 2

Entrada

6
pear 3
orange 7
strawberry 1
blackberry 5
cucumber 8
pear 2

Saída

pear: 3
pear: 3
orange: 7
pear: 3
pear: 3
blackberry: 5
blackberry: 5
pear: 3
blackberry: 5

Critérios

É obrigatório utilizar heap para resolver a tarefa. O algoritmo para obter a mediana deve executar em tempo $O(\log n)$, em que $n$ é o tamanho do grupo.

Correção

Esta tarefa será corrigida automaticamente sempre que você realizar um git push. Depois de terminada a tarefa, deve-se utilizar o botão na interface de notas para solicitar a correção de um monitor.