Solução por Anita Ramos
Esse problema exige que você atualize os valores de uma determinada posição de um vetor toda vez que este for diferente do valor processado anteriormente. Além disso, é necessário armazenar os valores alterados para imprimir no final.
Iniciando a programação então, depois de declarar a biblioteca, declaramos um e um que nos ajudaram nesse armazenamento e impressão e declaramos as demais variáveis. Depois lemos o e o e já iniciamos o loop para ler todos as atualizações iniciais dadas, guardando em um map a última atualização para cada número do programa. Em seguida iniciamos o loop de atualizações novas, em que para cada versão lida nós checamos se ela é maior que a versão atual armazenada. Se ela for, nós alteramos a atualização do programa no map para a mais atual e guardamos seu identificador no set . Por fim, declaramos um iterador para passar por todo o conjunto e imprimimos o identificador e a última atualização armazenada de cada número do programa, retornando no final a 0.
Segue a programação comentada para melhor compreensão da solução:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> //biblioteca utilizada | |
using namespace std; | |
int main() | |
{ | |
map<long long int, int> v; //declaração do map 'v' | |
set<long long int> s; //declaração do set 's'; | |
int C,N; //declarção das variáveis | |
long long int Pc, Vc, Pn, Vn; //declaração de variáveis do tipo long long | |
scanf("%d %d", &C, &N); //leitura da 1ª linha de entrada | |
for(int i=0; i<C; i++) //loop para ler todos os 'Pc's e 'Vc's | |
{ | |
scanf("%lld %lld", &Pc, &Vc); //leitura de um par (Pc,Vc) | |
v[Pc]=Vc; //no map v, 'v[Pc]' recebe 'Vc' | |
} | |
for(int i=0; i<N; i++) //loop para ler todos os 'Pn's e 'Vn's | |
{ | |
scanf("%lld %lld", &Pn, &Vn); //leitura de um par (Pn,Vn) | |
if(Vn>v[Pn]) //se o valor 'Vn' lido for maior que o atual armazenado (atualização mais nova) | |
{ | |
v[Pn]=Vn; //'v[Pn]' recebe 'Vn' (recebe identificador da atualização mais nova) | |
s.insert(Pn); //insiro 'Pn' no conjunto de impressão 's' | |
} | |
} | |
set<long long int>::iterator it; //declaro um interador 'it' | |
for (it = s.begin(); it != s.end(); it++) //loop para ir do começo ao fim do meu conjunto de impressão | |
{ | |
printf("%lld %lld\n", *it, v[*it]); //imprimo o iterador e o valor corresponde a 'v[*it]' no map | |
} | |
return 0; //retorna a 0 | |
} |