Cod sursa(job #1818226)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 28 noiembrie 2016 21:51:16
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>

using namespace std;
ifstream fin ("heapuri.in");
ofstream fout("heapuri.out");
int v[200010],i,n,a,b,k,z[200010],aux,j,h,nr;

void swap(int &a, int &b)
{
    int c;
    c=a;
    a=b;
    b=c;
}

void add(int i)
{
    while(v[i]<v[i/2]&&i/2>0)
    {
        swap(v[i], v[i/2]);
        swap(z[i], z[i/2]);
        i/=2;
    }
}

void verificare(int i)
{
    int c, p;
    c=i*2;
    p=i;
    while(c<=k)
    {
        if(v[c+1]<v[c]&&c+1<=k)
            c++;
        if(v[p]>v[c])
        {
            swap(v[p], v[c]);
            swap(z[p], z[c]);
        }
        else
            break;
        p=c;
        c*=2;
    }
}

int main ()
{
    fin>>n;
    fin>>a>>b;
    v[1]=b;
    z[1]=1;
    k=1;
    nr=1;
    for(i=2;i<=n;i++)
    {
        fin>>a;
        if(a==1)
        {
            k++;
            nr++;
            fin>>v[k];
            z[k]=nr;
            add(k);
        }
        if(a==2)
        {
            fin>>b;
            for(j=1;j<=k;j++)
                if(z[j]==b)
                {
                    swap(v[j], v[k]);
                    swap(z[j], z[k]);
                    k--;
                    verificare(j);
                    break;
                }
        }
        if(a==3)
            fout<<v[1]<<"\n";
    }
    fin.close();
    fout.close();
    return 0;
}