MinHeap (poj2388)

//by zxfx100

//(sizeof a = n) && (heap = a[1..n]) && (a[0] is null) && (range is int)

class MinHeap

{

public:

int a[32768], n;

void build()

{

    n = 0;

}

void insert(int element)

{

    a[++n] = element;

    int i = n;

    while(i > 1)

    {

        int j = i >> 1;

        if(a[i] < a[j])

            swap(a[i], a[j]);

        i = j;

    }

}

int get()

{

    return a[1];

}

void extract()

{

    a[1] = a[n--];

    int i = 1, l = 2, r = 3;

    while(l <= n)

    {

        int index = i;

        if(a[l] < a[i])

            index = l;

        if(r <= n && a[r] < a[index])

            index = r;

        if(index == i)

            break;

        swap(a[i], a[index]);

        r = (l = (i = index) << 1) + 1;

    }

}

};

 

你可能感兴趣的:(heap)