Cod sursa(job #2270108)

Utilizator stefantagaTaga Stefan stefantaga Data 27 octombrie 2018 09:18:29
Problema Heapuri Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.54 kb
#include <fstream>

using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int v[200005],heap[200005],v1[200005];
void heapup(int x)
{
    if (x>1)
    {
        if (v1[heap[x]]<v1[heap[x/2]])
        {
            swap(heap[x],heap[x/2]);
            heapup(x/2);
        }
    }
}
void heapdown(int x,int u)
{
    int st,dr;
    if (x*2<=u)
    {
        st=v1[heap[x*2]];
        if (2*x+1<=u)
        {
            dr=v1[heap[x*2+1]];
        }
        else
        {
            dr=st+1;
        }
        if (min(st,dr)<v1[heap[x]])
        {
            if (st<dr)
            {
                swap(heap[x],heap[2*x]);
                heapdown(2*x,u);
            }
            else
            {
                swap(heap[x],heap[2*x+1]);
                heapdown(2*x+1,u);
            }
        }
    }
}
int n,q,i,x,nr,poz,j;
int main()
{
    f>>n;
    q=0;
    for (i=1;i<=n;i++)
    {
        f>>x;
        if (x==1)
        {
            f>>nr;
            q++;
            v1[q]=nr;
            heap[q]=q;
            heapup(q);
        }
        else
        if (x==2)
        {
            f>>poz;
            for (j=1;j<=q;j++)
            {
                if (heap[j]==poz)
                {
                    swap(heap[j],heap[q]);
                    q--;
                    heapdown(j,q);
                    break;
                }
            }
        }
        else
        {
            g<<v1[heap[1]]<<'\n';
        }
    }
    return 0;
}