Cod sursa(job #1898381)

Utilizator F4nELFanel Catalin F4nEL Data 1 martie 2017 23:19:29
Problema Heapuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
using namespace std;
int n,lg=0,v[200001]={0},poz[200001]={0},p=0;
void add(int a)
{
    v[lg]=a;
    poz[lg]=p;
    int f=lg;
    while (v[f]<v[f/2])
    {
        swap(v[f],v[f/2]);
        swap(poz[f],poz[f/2]);
        f/=2;
    }
}

void ster(int a)
{
    int f;
    for(int j=1;j<=lg;j++)
    if(poz[j]==a){f=j;break;}
    v[f]=v[lg];
    v[lg]=0;
    poz[f]=poz[lg];
    poz[lg]=0;
    lg--;
    while((v[f]>v[2*f] && 2*f<=lg) || (2*f+1<=lg && v[f]>v[2*f+1]))
    {
        if(v[f]>v[2*f+1] && 2*f+1<=lg){
        swap(v[f],v[2*f+1]);
        swap(poz[f],poz[2*f+1]);
        f=2*f+1;
        }
        else
        {
        swap(v[f],v[2*f]);
        swap(poz[f],poz[2*f]);
        f=2*f;
        }
    }

}
int main()
{
    ifstream f("heapuri.in");
    ofstream g("heap.out");
    f>>n;
    int cod,x;
    for(int i=1;i<=n;i++)
    {
        f>>cod;
        if(cod==1)
        {
            f>>x;
            lg++;
            p++;
            add(x);

        }
        else if(cod==2)
        {
            f>>x;
            ster(x);

        }
        else {
           g<<v[1]<<'\n';
        }
    }
}