Cod sursa(job #2895927)

Utilizator Alexandru_PotangaPotanga Alexandru Alin Alexandru_Potanga Data 29 aprilie 2022 16:55:18
Problema Heapuri Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.53 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;
    f >> n;
    vector <int> v;
    vector <int> ord;
    for(i = 0; i < n; i++)
    {
        f >> instr;
        if(instr == 1)
        {
            f >> x;
            ord.push_back(x);
            inserare_heap(v, x);
        }
        if(instr == 2)
        {
            f >> x;
            x--;
            stergere_heap(v, ord[x]);
        }
        if(instr == 3)
            g << v[0] << "\n";
    }
    return 0;
}