Cod sursa(job #2033135)

Utilizator LauraNaduLaura Nadu LauraNadu Data 6 octombrie 2017 10:20:18
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n, nr, q, x, a[100], heap[100], p[100], copil, parinte, h;
void urcare(int x)
{
    int copil=x;
    int parinte=x/2;
    while(parinte>=1 && a[heap[parinte]]>a[heap[copil]])
    {
        swap(heap[parinte], heap[copil]);
        p[heap[parinte]]=parinte;
        p[heap[copil]]=copil;
        copil=parinte;
        parinte/=2;
    }
}
void coborare(int x)
{
    int copil=2*x;
    int parinte=x;
    while(copil<=n)
    {
        if(copil+1<=n && a[heap[p[copil+1]]]>a[heap[p[copil]]])
            copil++;
        if(a[heap[p[parinte]]]<a[heap[p[copil]]])
        {
            swap(a[heap[p[parinte]]], a[heap[p[copil]]]);
            parinte=copil;
            copil*=2;
        }
    }
}
int main()
{
    f>>nr;
    while(nr>0)
    {
        f>>q;
        if(q==1)
        {
            f>>x;
            a[++n]=x;
            heap[++h]=n;
            p[n]=h;
            urcare(n);
        }
        if(q==2)
        {
            f>>x;
            heap[p[x]]=heap[h];
            h--;
            if(heap[p[x]]>heap[p[x]/2])
                urcare(x);
            else coborare(x);
        }
        if(q==3)
            g<<a[heap[1]]<<"\n";
        nr--;
    }
    return 0;
}