#ifndef __HEAP_H
#define __HEAP_H
#include <stdlib.h>
#include <string.h>
class PriorQueue
{
public:
PriorQueue(int a_size) : T(NULL), m_size(a_size)
{
T = new int[a_size + 1];
memset(T, 0, a_size + 1);
}
~PriorQueue() { delete[] T; }
int top() { return T[1]; }
void push(int n);
void pop();
private:
int* T;
int m_size;
};
#endif
#include "heap.h"
void PriorQueue::push(int n)
{
if(T[0] >= m_size)
return ;
T[++T[0]] = n;
int i = T[0];
while((i/2 > 0) && (T[i] < T[i/2]))
{
int tmp = T[i/2];
T[i/2] = T[i];
T[i] = tmp;
i /= 2;
}
}
void PriorQueue::pop()
{
T[1] = T[T[0]--];
int i = 2;
while( i < T[0] )
{
if( (i + 1) < T[0] && T[i+1] < T[i])
i++;
//swap
if(T[i] < T[i/2])
{
int tmp = T[i/2];
T[i/2] = T[i];
T[i] = tmp;
i *= 2;
}
else
break;
}
}