Pagini recente » Cod sursa (job #1619847) | Cod sursa (job #196705) | Cod sursa (job #245469) | Cod sursa (job #307555) | Cod sursa (job #2893973)
#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;
}