Solução Intermediário Informática - Semana 37

Solução

Para esse problema também temos uma solução simples:

  • Ordenar a lista a e para cada elemento de b fazer buscan binária nos elementos de a. Para isso podemos usar upper_bound do C++ ou fazer nossa própria busca binária.

Código para melhor entendimento:


# solucao de zeze deaugusto
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdlib>
using namespace std;
int main(void)
{
long long tama, tamb;
cin >> tama;
cin >> tamb;
vector<long long> a;
vector<long long> b;
long long i, in;
for(i=0; i < tama; i++) // lendo os numeros do vetor a
{
cin >> in;
a.push_back(in);
}
for(i=0; i < tamb; i++) // lendo os numeros do vetor b
{
cin >> in;
b.push_back(in);
}
sort(a.begin(), a.end()); // ordenando para fazer busca binária
for(i=0; i < b.size(); i++)
{
cout << upper_bound(a.begin(), a.end(), b[i]) - a.begin() << endl;
/*printando a posição relativa do limitante superior, que vai me dar o numero de elementos menor ou igual a b[i]*/
}
return 0;
}