Cod sursa(job #613587)

Utilizator Lokycatalin petre Loky Data 1 octombrie 2011 11:16:40
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>

using namespace std;

int a[200005],n,i,x,inst,r;

void swap(int x, int  y)
{
    int aux;
    aux=a[x];a[x]=a[y];a[y]=aux;
}

void heapup(int k)
{
    int t;
    if (k>1) {
        t=k/2;
        if (a[k]>a[t]) {
            swap(k,t);
            heapup(t);
        }
    }
}

void heapdw(int r, int k)
{
    int st,dr,i;
    if (r*2<=k)
    {
        st=a[r*2];
        if (r*2+1<=k) dr=a[r*2+1]; else dr=st-1;
        if (st>dr) i=2*r; else  i=2*r+1;
        if (a[i]>a[r])
        {
            swap(i,r);
            heapdw(i,k);
        }
    }
}

void heapsort(int k)
{
    while (k>1) {
        swap(1,k);--k;
        heapdw(1,k);
    }
}


int main()
{
    ifstream f("heapuri.in");
    ofstream g("heapuri.out");
    f>>n;
    x=0;
    for (i=1;i<=n;i++) {
        f>>inst;
        if (inst==1) {x++;f>>a[x];}
        //else if (inst==2)//
        else if (inst==3) {
        for (i=1;i<=x;i++)
        heapup(i);
        heapsort(x);
        g<<a[1]<<'\n';
    }
    }
    f.close();
    g.close();
    return 0;
}