#define LEFT(i) 2*(i)+1
#define RIGHT(i) 2*(i)+2
#define PARENT(i) ((i)-1)/2
int A[1000];
int size = 0;
void HEAPIFY(int i) {
int big = i;
if(LEFT(i) < size &&
A[LEFT(i)] > A[big]) big = LEFT(i);
if(RIGHT(i) < size && A[RIGHT(i)]
> A[big]) big = RIGHT(i);
if(big!=i) {
int q = A[i]; A[i] =
A[big]; A[big] = q; //Byt A[i] och A[big]
HEAPIFY(big);
}
}
int GETMAX() {
int max = A[0];
A[0] = A[--size];
HEAPIFY(0);
return max;
}
void INSERT(int newvalue) {
int i = size++;
while(i>0 && newvalue >
A[PARENT(i)]) {
A[i] = A[PARENT(i)];
i = PARENT(i);
}
A[i] = newvalue;
}