Cod sursa(job #2893973)

Utilizator DariaClemClem Daria DariaClem Data 26 aprilie 2022 22:43:04
Problema Heapuri Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
#include <bits/stdc++.h>

using namespace std;

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

int nrOperatii, heap[200000], pozitii[200000];

/// heap -> valori
/// pozitii -> introducere

int main() {
    int index1, index2, operatie, numar, pozitie = 0, aux;
    fin >> nrOperatii;
    for (index1 = 0; index1 < nrOperatii; index1 += 1) {
        fin >> operatie;
        if (operatie < 3) {
            fin >> numar;
            if (operatie == 1) {
                // adauga nod
                pozitii[++pozitie] = pozitie;
                heap[pozitie] = numar;
                aux = pozitie;
                while (aux and numar < heap[aux / 2]) {
                    swap(heap[aux], heap[aux / 2]);
                    swap(pozitii[aux], pozitii[aux / 2]);
                    aux /= 2;
                }
            } else {
                // scoate nod
                aux = 1;
                while (aux < pozitie and pozitii[aux] != numar) {
                    aux += 1;
                }
                for (index2 = aux; index2 < pozitie; index2 += 1) {
                    heap[index2] = heap[index2 + 1];
                    pozitii[index2] = pozitii[index2 + 1];
                }
                if (heap[aux] > heap[aux + 1]) {
                    swap(heap[aux], heap[aux + 1]);
                    swap(pozitii[aux], pozitii[aux + 1]);
                }
                pozitie -= 1;
            }
        } else {
            //afiseaza nod
            fout << heap[1] << "\n";
        }
    }
    return 0;
}