Heap cinético

Interface:
KinHeap(id, x0, speed, n): cria um maxheap cinético com n elementos, com identificador, valor inicial e velocidade nos vetores id, x0 e speed. 
Advance(t): avança o tempo para o instante t
Change(id, v): altera a velocidade do elemento id para v
Insert(id, xnow, v): insere o elemento id na posição xnow com velocidade v
Max(): identificador do elemento com o maior valor no instante atual
DeleteMax(): remove o elemento com o maior valor
Delete(id): remove o elemento id
Print(): imprime o heap no instante atual
Considere x0, v e now valores reais (double).

Codificação das operações:

1 <t>             significa Advance(t)
2 <id> <v>        significa Change(id, v)
3 <id> <xnow> <v> significa Insert(id, xnow, v)
4                 significa Max()
5                 significa DeleteMax()
6 <id>            significa Delete(id)
7                 significa Print()
Exemplo de entrada para o programa de testes:

A primeira linha do arquivo de entrada contém número de elementos iniciais, n.
As n próximas linhas contêm elementos iniciais com formato "x_0 v", sendo que os id's dos elementos iniciais devem ser 1, 2,..., n.
As linhas subsequentes contém comandos seguindo a codificação, como os que seguem.

5
8 5
3 4
17 -1
16 1
5 0
7
4
1 1
7
4
1 4
7
2 2 0
2 4 -1
4
5
1 9.5
7
4
5
3 6 9.5 1
6 4
1 15
7
Saída esperada para este teste:

Cada tripla, na impressão abaixo, representa o x_now (x0 v) do elemento em questão.

      3 (3 4)
   16 (16 1)
      5 (5 0)
17 (17 -1)
   8 (8 5)
3
      7 (3 4)
   16 (17 -1)
      5 (5 0)
17 (16 1)
   13 (8 5)
4
      13 (17 -1)
   19 (3 4)
      5 (5 0)
28 (8 5)
   20 (16 1)
1
      7.5 (17 -1)
   14.5 (24 -1)
19 (19 0)
   5 (5 0)
2
   2 (17 -1)
15 (0 1)
   5 (5 0)