Cod sursa(job #2076273)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 26 noiembrie 2017 13:17:57
Problema Heapuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 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++;
    int i=m-1;
    while(i>=0 && v[i]<v[(i-1)/2])
    {
        swap(v[i],v[(i-1)/2]);
        swap(idx[i],idx[(i-1)/2]);
        i=(i-1)/2;
    }
}
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);
}
void afisare()
{
    for(int i=0;i<m;++i)
        cout<<v[i]<<"  "<<idx[i]<<endl;
    cout<<endl;
}
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;
       //afisare();
    }
    g.close();
    f.close();
}