Cod sursa(job #2075842)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 25 noiembrie 2017 18:48:00
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int v[200020], idx[200020], n, m;
void heapify(int a[],int i)
{
    int l=2*i+1, r=2*i+2, sm=i;
    if (l < m && a[l] < a[i])
        sm = l;
    if (r < m && a[r] < a[sm])
        sm = r;
    if (sm != i)
    {
        swap(a[i], a[sm]);
        swap(idx[i], idx[sm]);
        heapify(a,sm);
    }
}
void insereaza (int x)
{
    v[m]=x;m++;
    if(m>1)
        heapify(v,1);
}
int caut (int x)
{
    for(int i=0;i<m;++i)
        if(idx[i]==x) return i;
    return -1;
}
void del(int p)
{
    for(int i=p;i<m-1;++i)
        idx[p]=idx[p+1];
    v[p]=v[m-1];
    m--;
    heapify(v,p);
}
int main()
{
    int op,x, nr=1;
    f>>n;
    while(n--)
    {
        f>>op;
        if(op==1)
        {
            f>>x;
            idx[m]=nr;nr++;
            insereaza(x);
        }
        if(op==2)
        {
            f>>x;
            int p=caut(x);
            del(p);
        }
        if(op==3)
            g<<v[0]<<endl;
    }
    g.close();
    f.close();
}