Para essa questão vamos considerar o seguinte problema: Para cada valor devemos encontrar o primeiro valor a esquerda dele que é estritamente maior que ele.
Podemos fazer isso com a ajuda de uma stack, estrutura do C++. Vamos passar pela lista da esquerda para a direita, e para cada elemento retiramos todos os elementos menores ou iguais a ele da stack, e após isso colocamos ele to noto. Com isso mantemos uma stack que é estritamente crescente, e com isso o valor no topo da stack após removermos os elementos menores ou iguais será o primeiro elemento que bloqueia sua visão. Também devemos considerar o caso de quando a stack está vazia, em que não tem ninguém que bloqueia sua visão.
Código para melhor entendimento:
https://gist.github.com/fredbr/8d6c3e24c26fecf4a7d3884a8e782959
