Cod sursa(job #1265807)

Utilizator delta_wolfAndrei Stoica delta_wolf Data 17 noiembrie 2014 19:48:11
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <cstdio>
using namespace std;
int n,i,l,c,nr,h[1000];
int left_son(int k){return 2*k;}
int right_son(int k){return 2*k+1;}
int father(int k){return k/2;}
void sift(int h[],int k,int n)
{
    int son,ax;
    do
    {
        son=0;
        if(left_son(k)<=n)
        {
            son=left_son(k);
            if(right_son(k)<=n&&h[right_son(k)]>h[left_son(k)])
            son=right_son(k);
            if(h[son]<=h[k])
            son=0;
        }
        if(son)
        {
            ax=h[k];
            h[k]=h[son];
            h[son]=ax;
            k=son;
        }
    }while(son);
}
void percolate(int h[],int n,int k)
{
    int key=h[k];
    while((k>1)&&(key>h[father(k)]))
    {
        h[k]=h[father(k)];
        k=father(k);
    }
    h[k]=key;
}
void cut(int h[], int& N, int K)
{
    h[K]=h[N];
    --N;
    if ((K>1)&&(h[K]>h[father(K)]))
        percolate(h, N, K);
     else
        sift(h, N, K);
}
void insert(int h[],int& N,int key)
{
    h[++N]=key;
    percolate(h, N, N);
}
void build_heap(int H[], int N) {
    for (int i = N / 2; i > 0; --i) {
        sift(H, N, i);
    }
}
int main()
{
    freopen("heapuri.in","r",stdin);
    freopen("heapuri.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&c);
        if(c==1)
        {
            scanf("%d",&nr);
            insert(h,l,nr);
        }
    }

    return 0;
}