Cod sursa(job #1532914)

Utilizator redcrocodileIlies Andreea redcrocodile Data 21 noiembrie 2015 19:58:50
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int i,n,loc[200001],x,k;
struct alalala
{
    int ord, val;
}a[200001];
void adauga()
{
    int k;
    a[n].val = x;
    a[n].ord = i;
    loc[i] = n;
    k = n;
    while(k>0 and a[k].val<a[k/2].val)
    {
        swap(loc[i],loc[a[k/2].ord]);
        swap(a[k],a[k/2]);
        k/=2;
    }
}
int minim(int a, int b)
{
    if (a<b or b==0) return 2*k; else return 2*k+1;
}
void sterge()
{
    int mini;
    k = loc[x];
    a[k].val = a[n].val;
    a[k].ord = a[n].ord;
    loc [a[k].ord] = k;
    n--;
    while(2*k<=n)
    {
        mini = minim(a[k*2].val,a[k*2+1].val);
        swap(loc[a[k].ord],loc[a[mini].ord]);
        swap(a[k],a[mini]);
        k=mini;
    }
}

int main()
{
    int m,j,cerinta;
    f>>m;
    for (j=1;j<=m;j++)
    {
        f>>cerinta;
        if (cerinta != 3) f>>x;
         else g<<a[1].val<<"\n";
        if (cerinta == 1) {n++; i++; adauga();}
        if (cerinta == 2) {sterge();}
    }
    return 0;
}