Cod sursa(job #1237625)

Utilizator delia_99Delia Draghici delia_99 Data 4 octombrie 2014 14:50:18
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,i,m,inst,x,y,j;
struct Heap
{
    int val,poz;
};
Heap a[200005];

void HeapUp(int i)
{
    if(i==1)
        return;
    else if(a[i].val<a[i/2].val)
    {
        swap(a[i],a[i/2]);
        HeapUp(i/2);
    }
}

void HeapDown(int i,int m)
{
    int dr,st;
    if(2*i<=m)
        st=a[2*i].val;
    else return;
    if(2*i+1<=m)
        dr=a[2*i+1].val;
    else dr=st+1;
    if(dr<st&&dr<a[i].val)
    {
        swap(a[i],a[2*i+1]);
        HeapDown(2*i+1,m);
    }
    else if(st<a[i].val)
    {
        swap(a[i],a[2*i]);
        HeapDown(2*i,m);

    }
    return;
}
int main()
{
    f>>n;
    m=0;
    for(i=1; i<=n; i++)
    {
        f>>inst;
        if(inst==1)
        {
            f>>a[++m].val;
            a[m].poz=m;
            HeapUp(m);
        }
        if(inst==2)
        {
            f>>x;
            y=0;
            j=0;
            while(y==0&&j<m)
                if(a[++j].poz==x)
                    y=j;
            swap(a[y],a[m]);
            m--;
            HeapDown(y,m);

        }
        if(inst==3)
          g<<a[1].val<<'\n';
    }

    return 0;
}