func (h *MinMaxHeap2) Push(value interface{}) {
	h.size++
	h.data = append(h.data, value)
	h.up(h.size - 1)
}
Push adds element to the heap
package heap
import "math"
type MinMaxHeap2 struct {
	size int
	data []interface{}
	comp func(interface{}, interface{}) bool
}
func NewMinMaxHeap2(comp func(a, b interface{}) bool) *MinMaxHeap2 {
	h := &MinMaxHeap2{
		size: 0,
		data: make([]interface{}, 0),
		comp: comp,
	}
	return h
}
func (h *MinMaxHeap2) Size() int {
	return h.size
}
func (h *MinMaxHeap2) IsEmpty() bool {
	return h.size == 0
}
func (h *MinMaxHeap2) Clear() {
	h.size = 0
	h.data = nil
}