Problema B - Lançamento do Peso

Nas Olimpíadas de Nisa e Idanha-a-Nova (ONI), um dos desportos mais famosos é o Lançamento do Peso com Precisão, que se realiza todas as semanas em Idanha-a-Nova. Neste jogo o objetivo é lançar o peso a uma distância o mais próxima possível de um inteiro fixo K. Todas as semanas, há um torneio entre os dois concelhos com vários jogadores, todos com uma distância de lançamento fixa e distinta entre si. Cada jogador tem uma força de lançamento que corresponde exatamente à distância que consegue lançar o peso, nem mais, nem menos. Sabe-se que todos os habitantes de Nisa têm uma força de lançamento superior a K e todos os habitantes de Idanha-a-Nova têm uma força de lançamento inferior a K.

Uma ronda do jogo consiste em dois jogadores de concelhos diferentes atirarem o peso e aquele que acertar mais perto do objetivo K continua a jogar e o outro é eliminado. Em caso de empate, ganha o jogador de Nisa pois é convidado, ou seja, o de maior força. Como as equipas de cada concelho não querem cansar os seus melhores jogadores, escolhem sempre o seu jogador que atira o peso a uma distância mais afastada do objetivo. Assim que um dos concelhos ficar sem jogadores, o torneio acaba e há uma grande festa no concelho vencedor.

Tu, como finalista das olimpíadas de informática, apercebes-te que consegues prever as vitórias de um jogador no próximo torneio e decides que vais lucrar com o teu conhecimento. Assim, decides informar quantas vitórias é que um certo Jogador vai ter aos munícipes que requisitarem os teus serviços (o jogador é escolhido pelo munícipes).

Por exemplo, consideremos K = 10 e que os jogadores têm forças {1, 3, 6, 7, 12, 18, 19, 25} o torneio seria o seguinte:

Neste caso, o jogador 12 ganhou 3 jogos, o jogador 3 ganhou 2, o jogador 1 e 19 ganharam ambos 1 e os restantes jogadores não ganharam um único jogo.

No entanto, a tua tarefa não é assim tão simples, pois de vez em quando os jogadores reformam-se e outros novos jogadores começam a participar nestes jogos, e tens de ter isto em conta. Assim, irás receber Q pedidos, cada um irá:

As forças dos jogadores ativos em qualquer altura são todas distintas entre si e nunca iguais a K e em qualquer altura há sempre pelo menos um jogador de Nisa e um jogador de Idanha-a-Nova.

Como também tens de treinar para as olimpíadas de informática, queres perder o mínimo de tempo possível a responder às perguntas para cada estado do conjunto de jogadores.

O Problema

Dado um K fixo e um conjunto S de inteiros, (que representam as forças dos jogadores) que vai sendo alterado, descobrir a cada momento quantas rondas é que um dado inteiro ganha.

Input

A primeira linha contém 3 inteiros separados por espaços, o objetivo K, o número de jogadores iniciais N e o número de pedidos Q, que podem ser uma pergunta, uma reforma ou um jogador novo.

A segunda linha contém N inteiros, Si, que correspondem aos N jogadores iniciais.

As Q linhas seguintes consistem, cada uma, num carácter e num inteiro X separados por espaços, no seguinte formato:

É garantido que sempre que um pedido é uma pergunta ou uma reforma, existe um jogador com força X e que sempre que o pedido é um novo jogador, não existe em S um jogador com força X.

Output

Uma linha por cada pergunta (ou seja, por cada pedido ? X), com apenas um inteiro que corresponde a quantos jogos o jogador X ganhou no momento em que a pergunta foi feita.

Restrições

São garantidos os seguintes limites em todos os casos de teste que irão ser colocados ao programa:

1 ≤ K ≤ 1 000 000 000 Distância objetivo
2 ≤ N ≤ 100 000 Número de jogadores
1 ≤ Si ≤ 1 000 000 000 Valores de forças de cada jogador
1 ≤ Q ≤ 100 000 Número de pedidos

Nota: É ainda garantido que:

Os casos de teste deste problema estão organizados em X grupos com restrições adicionais diferentes:

Grupo Número de Pontos Restrições adicionais
1 10 N ≤ 100, Q ≤ 100 e K, Si ≤ 1 000
2 20 N ≤ 10 000, Q ≤ 100 e K, Si ≤ 100 000
3 20 K, Si ≤ 100 000 e apenas os jogadores mais fortes e mais fracos são adicionados/removidos *
4 20 K, Si ≤ 100 000
5 30 -

* Apenas os jogadores mais fortes e mais fracos serem adicionados/removidos significa que sempre que é feito um pedido de - é sempre relativa ou ao jogador mais fraco ou ao jogador mais forte, e cada pedido + adiciona um jogador mais fraco que todos os outros ou mais forte que todos os outros.

Input do Exemplo 1

10 8 8
1 3 6 7 12 18 19 25
? 1
? 3
? 6
? 7
? 12
? 18
? 19
? 25

Output do Exemplo 1

1
2
0
0
3
0
1
0

Explicação do Exemplo 1

Este exemplo corresponde ao mencionado no enunciado.

Input do Exemplo 2

15 10 12
3 34 6 14 21 26 9 13 18 10
? 9
? 14
+ 25
+ 8
- 18
? 26
- 6
+ 19
- 3
? 21
+ 40
? 13

Output do Exemplo 2

0
0
1
2
1

Explicação do Exemplo 2

Quando as duas primeiras perguntas são feitas, os jogadores têm forças {3, 6, 9, 10, 13, 14, 18, 21, 26, 34}. O jogador 9 na sua única ronda perde contra o jogador 21 por desempate e o jogador 14 nunca chega a jogar.

Quando a terceira pergunta é feita, os jogadores têm forças {3, 6, 8, 9, 10, 13, 14, 21, 25, 26, 34}. O jogador 26 ganha contra o jogador 3 e perde contra o 6.

Quando a quarta pergunta é feita, os jogadores têm forças {8, 9, 10, 13, 14, 19, 21, 25, 26, 34}. O jogador 21 ganha contra os jogadores 8 e 9 e perde contra o jogador 10.

Quando a quinta pergunta é feita, os jogadores têm forças {8, 9, 10, 13, 14, 19, 21, 25, 26, 34, 40}. O jogador 13 ganha contra o jogador 19 e o torneio acaba.


Final Nacional das ONI'2019
Centro de Congressos da Alfândega Porto
(1 de Abril de 2019)