bool  Heap::insert (int id, float chave){ /*insere no final e sobe o elemento*/
	//if (size+1<maximo && id<maximo && auxID[id]<maximo && auxHeap[auxID[id]]!=id){
	if (size+1<maximo ){
		heap[size+1]=chave;
		auxHeap[size+1] = id;
		size++;
		subir(size);
		return true;
	} else return false;
}
/* recebe um vetor e corrige ele de forma a transforma-lo em um max-heap */
void corrigirMaxHeap(Heap **heap) {
	if(*heap == NULL) {
		return;
	}

	int i;
	for(i = 0; i < (*heap)->size; i++) {
		subir(heap, i);
	}
}
void inserirHeap(Heap **heap, int k) {
	if(*heap == NULL) {
		inicializarHeap(heap);
	}

	if((*heap)->size == 0) {
		(*heap)->size = 1;
		(*heap)->h = inicializarVetor(1);
		(*heap)->h[0] = k;
	} else {
		(*heap)->size += 1;
		(*heap)->h = realocarVetor((*heap)->h, (*heap)->size);
		(*heap)->h[(*heap)->size - 1] = k;
		subir(heap, (*heap)->size - 1);
	}
}
void  Heap::subir(int i){ 
	int pai = i/2;
	if (pai>0){ /*vetor com size+1 posições*/
		if (maiorQuefloat(heap[pai],heap[i])==true){
			float aux1 = heap[i];
			heap[i] = heap[pai];
			heap[pai] = aux1;
				
			int aux = auxHeap[i];
			auxHeap[i] = auxHeap[pai];
			auxHeap[pai] = aux;
					
			subir(pai);
		}				
	}
	//if (auxHeap[i]>=0) auxID[auxHeap[i]] = i;
}
/*
    Insere um elemento do heap min-max.
 */
void inserir( HeapMinMax *heapMinMax, int valor ) {

    if ( heapMinMax->tamanho < TAM_MAX_HEAP ) {

        heapMinMax->tamanho++;

        heapMinMax->valores[heapMinMax->tamanho] = valor;
        subir( heapMinMax, heapMinMax->tamanho );

    } else {

        printf( "Heap min-max cheio - Overflow!" );
        exit( 1 );

    }

}