A história
"2016? Tudo bem", resmungou Hilbert, vendedor de brinquedos. Ele abriu os olhos, limpou o molho de salada que escorria do ouvido e comeu um cremeschnitte de manhã. Férias exemplares. No entanto, ele precisa ir trabalhar agora e terminar a contabilidade do ano.
O Natal é um período muito produtivo do ano, especialmente para suas vendas. Hilbert sabe exatamente como funciona: uma pessoa entra em uma loja e compra o primeiro presente que lhe é oferecido. Eles pagam e correm para outra loja. Na prática, o que realmente é o presente realmente não faz diferença. O preço também é irrelevante, desde que não seja muito alto. Tudo depende do tempo restante até o Natal - quanto menor o tempo, maior o remorso dos clientes, maior o preço que eles estão dispostos a pagar.
Tudo o que é preciso para Hilbert é olhar para o relógio - e ele sabe imediatamente quanto seus clientes podem gastar. Ele pode facilmente tirar proveito desse fato: ele encontra o presente mais caro que pode vender para um determinado cliente e oferece a ele. Só agora ele percebeu que se esqueceu de empregar essa estratégia astuta no ano passado. Isso vai mudar!
No entanto, Hilbert gostaria de saber quanto seus negócios teriam florescido, se ele realmente tivesse usado seu grande esquema. Ele conseguiu reunir uma lista de pessoas que vieram à sua loja, mas não sabe ao certo quanto dinheiro poderia ter ganho com elas.
Sua tarefa (TL; DR)
A entrada consiste em uma lista crescente de preços de presentes disponíveis e uma lista dos orçamentos dos clientes. A lista de orçamentos está na mesma ordem em que os clientes chegaram à loja - com a condição de que todo cliente esteja disposto a pagar pelo menos o mesmo valor que o anterior, o que significa que também está em ascensão.
Para cada cliente, encontre o presente mais caro pelo qual está disposto a pagar e produza o preço. Se não houver presentes no orçamento disponíveis, produza a 0.
Você recebe um -40%bônus de caracteres, se a complexidade assintótica do seu algoritmo for O(n+m)(em vez de trivial O(n*m)) Onde n, mestão os comprimentos das listas de entrada.
Isso é código-golfe , o menor número de bytes vence. As brechas padrão são proibidas.
Exemplo
Entrada:
1 2 2 2 5 7 10 20
1 1 2 3 6 6 15 21 21 22
Resultado:
1 0 2 2 5 2 10 20 7 0
Essa tarefa foi tirada de uma competição de programação local e traduzida para inglês por mim. Aqui está a tarefa original: https://www.ksp.sk/ulohy/zadania/1131/