Cod sursa(job #2065752)

Utilizator Eduard24Eduard Scaueru Eduard24 Data 14 noiembrie 2017 09:47:51
Problema Heapuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.84 kb
#include <fstream>
#include <algorithm>
#include <iostream>

using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");

int n,x,v[10000],i,poz[1000],m,y,nr,j;

void Up(int k, int m)
{
    int t,f;
    f=k;
    t=f/2;
    while(t && v[t]>v[f])
    {
        swap(v[t],v[f]);
        f=t;
        t=f/2;
    }
}

void Down(int k, int m)
{
    int t,f;
    t=k;
    f=k*2;
    while(f<=m)
    {
        if(f<m)
        {
            if(v[f]<v[f+1]) f++;
        }
        if(v[t]<v[f])
        {
            swap(v[t],v[f]);
            t=f;
            f=f*2;
        }
        else
        {
            f=m+1;
        }
    }
}

void Delete(int k, int m)
{
    v[k]=v[m];
    m--;
    if(k>1 && v[k]>v[k/2]) Up(k,n);
    else Down(k,n);

}

void Inserare(int y)
{
    m++;
    v[m]=y;
    Up(m,m);
}

int Minim()
{
    int i,minn;
    minn=v[1];
    for(i=2;i<=m;i++)
    {
        if(v[i]<minn)
        {
            minn=v[i];
        }
    }
    return minn;
}

int main()
{
    fin>>n;
    m=0;
    nr=1;
    for(i=1;i<=n;i++)
    {
        fin>>x;
        if(x==1)
        {
            fin>>y;
            Inserare(y);
            poz[nr]=y;
            nr++;
            /*for(j=1;j<=m;j++)
            {
                cout<<v[j]<<" ";
            }
            cout<<"\n";*/
        }
        if(x==2)
        {
            fin>>y;
            for(j=1;j<=m;j++)
            {
                if(v[j]==poz[y])
                {
                    break;
                }
            }
            Delete(j,m);
            /*for(j=1;j<=m;j++)
            {
                cout<<v[j]<<" ";
            }
            cout<<"\n";*/
        }
        if(x==3)
        {
            fout<<Minim()<<"\n";
        }
    }
    return 0;
}