Pagini recente » Cod sursa (job #269102) | Cod sursa (job #1476266) | Cod sursa (job #2438215) | Cod sursa (job #3139680) | Cod sursa (job #3240253)
#include <fstream>
using namespace std;
struct element {
int x, poz;
};
int pozitii[262200];
element v[262200];
int main() {
int n, elem, i, cod, x, poz;
element aux;
ifstream fin( "heapuri.in");
ofstream fout( "heapuri.out");
fin >> n;
elem = 0;
for (i = 1; i <= n; i++) {
fin >> cod;
if (cod == 1) {
fin >> v[elem].x;
v[elem].poz = i;
pozitii[i] = elem;
poz = elem;
elem++;
while (poz > 1 && v[poz / 2].x > v[poz].x) {
pozitii[v[poz].poz] = poz / 2;
pozitii[v[poz / 2].poz] = poz;
aux = v[poz / 2];
v[poz / 2] = v[poz];
v[poz] = aux;
poz /= 2;
}
}
else if (cod == 2) {
fin >> x;
poz = pozitii[x];
pozitii[v[elem - 1].poz] = poz;
v[poz] = v[elem - 1];
elem--;
while ( ( poz * 2 + 1 <= elem && v[poz].x > min(v[poz * 2].x, v[poz * 2 + 1].x) ) || (poz * 2 <= elem && v[poz].x > v[poz * 2].x) ) {
if (v[poz * 2].x < v[poz * 2 + 1].x || poz * 2 + 1 > elem) {
pozitii[v[poz].poz] = poz * 2;
pozitii[v[poz * 2].poz] = poz;
aux = v[poz];
v[poz] = v[poz * 2];
v[poz * 2] = aux;
poz *= 2;
}
else {
pozitii[v[poz].poz] = poz * 2 + 1;
pozitii[v[poz * 2 + 1].poz] = poz;
aux = v[poz];
v[poz] = v[poz * 2 + 1];
v[poz * 2 + 1] = aux;
poz = poz * 2 + 1;
}
}
}
else {
fout << v[0].x << '\n';
}
}
return 0;
}