Cod sursa(job #2895939)

Utilizator Alexandru_PotangaPotanga Alexandru Alin Alexandru_Potanga Data 29 aprilie 2022 17:07:28
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void heapify(vector <int> &v, int index, int n)
{
    int minim = index;
    int st = 2 * index + 1;
    int dr = st + 1;
    if (st < n && v[st] < v[minim])
        minim = st;
    if (dr < n && v[dr] < v[minim])
        minim = dr;

    if (minim != index)
    {
        int aux;
        aux = v[index];
        v[index] = v[minim];
        v[minim] = aux;

        heapify(v, minim, n);
    }
}
void inserare_heap(vector <int> &v, int x)
{
    v.push_back(x);
    int n = v.size();
    if(n > 1)
    {
        for(int i = n / 2 - 1; i >= 0; i--)
            heapify(v, i, n);
    }
}
void stergere_heap(vector <int> &v, int numar)
{
    int n = v.size();
    int i;
    for(i = 0; i < n; i++)
    {
        if(numar == v[i])
            break;
    }

    int aux;
    aux = v[n-1];
    v[n-1] = v[i];
    v[i] = aux;

    n--;
    v.pop_back();
    for(i = n / 2 - 1; i >= 0; i--)
        heapify(v, i, n);

}
int main()
{
    int n, i, instr, x, nr = 0;
    f >> n;
    vector <int> v;
    v.reserve(200001);
    int ord[200001];
    for(i = 0; i < n; i++)
    {
        f >> instr;
        if(instr == 1)
        {
            f >> x;
            nr++;
            ord[nr] = x;
            inserare_heap(v, x);
        }
        if(instr == 2)
        {
            f >> x;
            stergere_heap(v, ord[x]);
        }
        if(instr == 3)
            g << v[0] << "\n";
    }
    return 0;
}