Treap

A árvore deve estar organizada como um heap de máximo.

Seu programa deve inicializar uma treap vazia.

Codificação das operações:

1 <x> significa Insert(r, x)
2 <x> significa Delete(r, x)
3 <x> significa println(Search(r, x)? 1 : 0)
4     significa println(Min(r))
5     significa Print(r)
Exemplo de entrada para o programa de testes:
1 1
1 2
1 3
3 1
2 1
3 1
4
1 0
1 1
5
Saída esperada para este teste:
1
0
2
   0 43
1 503
   2 232
      3 91

A saída do Print pode variar, pois depende das prioridades geradas aleatoriamente.

Treap funcional

Assim como na deque persistente, para a versão funcional da treap, adicione como primeiro argumento das operações um inteiro que representa o id da treap que a operação atuará e inicialize o programa com uma treap vazia de id 0.

Além disso, adicione mais uma opção:

6     significa Print(r) para cada treap r criada

Exemplo de entrada para o programa de testes:

1 0 1
1 1 2
1 2 3
2 3 1
1 4 0
1 5 1
1 5 4
3 3 1
3 4 1
4 4
5 6
5 7
Saída esperada para este teste:
1
0
2
   0 503
1 3
   2 32
      3 107
   0 503
2 32
      3 107
   4 74

A saída dos Print pode variar, pois depende das prioridades geradas aleatoriamente.