Pagini recente » Cod sursa (job #1361758) | Cod sursa (job #1301875) | Cod sursa (job #1864400) | Cod sursa (job #1133438) | Cod sursa (job #3137970)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
const int mxN = 2e5 + 5;
int H[mxN], v[mxN], n;
void sift(int p) {
int i = p;
while (i > 1 && H[i] < H[i / 2]) {
swap(H[i], H[i / 2]);
i /= 2;
}
}
void percolate(int p) {
int i = p;
while (true) {
int minSon = 0;
if (2 * i <= n) {
minSon = 2 * i;
}
if (2 * i + 1 <= n && H[2 * i + 1] < H[2 * i]) {
minSon = 2 * i + 1;
}
if (minSon == 0 || H[i] < H[minSon]) {
break;
}
swap(H[i], H[minSon]);
i = minSon;
}
}
void add(int k) {
H[++n] = k;
sift(n);
}
int search(int k) {
for (int i = 1; i <= n; i++) {
if (H[i] == k) {
return i;
}
}
}
void remove(int k) {
int p = search(k);
H[p] = H[n];
n--;
percolate(p);
}
int main() {
int q;
fin >> q;
for (int i = 0; i < q; i++) {
int ask, x;
fin >> ask;
if (ask == 1) {
fin >> x;
v[n + 1] = x;
add(x);
}
else if (ask == 2) {
fin >> x;
remove(v[x]);
}
else {
fout << H[1] << "\n";
}
}
return 0;
}