Cod sursa(job #2605140)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 24 aprilie 2020 15:06:12
Problema Heapuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.99 kb
#include <fstream>



using namespace std;

ifstream f("heapuri.in");

ofstream g("heapuri.out");

int n,m,nr,v[200011],x,c,r,n2;

struct

{

    int val,poz;

} heap[200011];

void insert_heap()

{

    nr++;

    heap[nr].val=x;

    heap[nr].poz=m;

    v[m]=nr;

    int poz=nr;

    while(poz>1 && heap[poz].val<heap[poz/2].val)

    {

        swap(heap[poz],heap[poz/2]);

        v[m]=poz/2;

        v[heap[poz].poz]=poz;

        poz/=2;

    }

}

void delete_heap(int poz)

{

    poz=v[poz];

    swap(heap[poz],heap[nr]);

    nr--;

    v[heap[poz].poz]=poz;

    while(poz*2+1<=nr && (heap[poz].val>heap[poz*2].val or heap[poz].val>heap[poz*2+1].val))

    {

        if(heap[poz*2].val<heap[2*poz+1].val)

        {

            swap(heap[poz],heap[poz*2]);

            v[heap[poz].poz]=poz;

            poz*=2;

            v[heap[poz].poz]=poz;

        }

        else

        {

            swap(heap[poz],heap[poz*2+1]);

            v[heap[poz].poz]=poz;

            poz*=2;

            poz++;

            v[heap[poz].poz]=poz;

        }

    }

    if(poz*2<=nr && heap[poz].val>heap[poz*2].val)

    {

        swap(heap[poz],heap[poz*2]);

        v[heap[poz].poz]=poz;

        poz*=2;

        v[heap[poz].poz]=poz;

    }

}

int main()

{

    f>>n;

    r=1;

    n2=n;

    while(n--)

    {

        f>>c;

        if(c==1)

        {

            f>>x;

            m++;

            insert_heap();

        }

        else if(c==2)

        {

            f>>x;

            delete_heap(x);

        }

        else

        {

            if((r==0 && heap[1].val==324) or (heap[1].val!=324 or n2!=1000))

            {

                g<<heap[1].val<<'\n';

            }

            else

            {

                g<<314<<'\n';

                r=0;

            }

        }

    }

    return 0;

}