Cod sursa(job #1918613)

Utilizator ChiriGeorgeChiriluta George-Stefan ChiriGeorge Data 9 martie 2017 16:12:06
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>
#define NMAX 200005
using namespace std;

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

int n, H[NMAX], inserted[NMAX], position[NMAX];

void heap_insert(int i)
{
    ++n;
    int tata = n/2, fiu = n;
    while(H[tata] > i && tata > 0)
    {
        H[fiu] = H[tata];
        fiu = tata;
        tata /= 2;
    }
    H[fiu] = i;
}

void heap_delete(int i)
{
    int aux;
    for(int k = 1; k <= n; k++)
        if(H[k] == i)
        {
        i = k;
        break;
        }
    H[i] = H[n];
    n--;
    int fiu = 2*i, tata = i;
    if(fiu < n)
        if(H[fiu] > H[fiu + 1])
            ++fiu;
    while(H[tata] > H[fiu] && fiu <= n)
    {
        aux = H[tata];
        H[tata] = H[fiu];
        H[fiu] = aux;
        tata = fiu;
        fiu *= 2;
        if(fiu < n)
            if(H[fiu] > H[fiu + 1])
            ++fiu;
    }
}

int main()
{
    int p, k, i, o, no = 0;
    fin >> p;
    for(k = 1; k <= p; k++)
    {
        fin >> o;
        if(o == 1)
        {
            fin >> i;
            ++no;
            inserted[no] = i;
            heap_insert(i);
        }
        else
            if(o == 2)
            {
                fin >> i;
                heap_delete(inserted[i]);
            }
            else
            {
                fout << H[1] << '\n';
            }
    }

    return 0;
}