Pagini recente » Cod sursa (job #1510843) | Cod sursa (job #2133019) | Cod sursa (job #2458398) | Statistici Veljko Radic (painkiller) | Cod sursa (job #3124189)
#include <iostream>
int n, c, x, j, heap[200005], poz[200005];
void push(int p) {
for(int hp = p >> 1; hp && heap[hp] > heap[p]; p = hp, hp /= 2) {
std::swap(heap[hp], heap[p]);
std::swap(poz[hp], poz[p]);
}
}
void pop(const int& p) {
int pz = 1;
for(; poz[pz] != p; ++pz) {}
heap[pz] = 1000000001;
int son;
do {
son = 0;
if ((pz << 1) <= j) {
son = pz << 1;
if (((pz << 1) + 1) <= j && heap[((pz << 1) + 1)] <= heap[(pz << 1)]) {
son = ((pz << 1) + 1);
}
if (heap[son] >= heap[pz]) {
son = 0;
}
}
if (son) {
std::swap(heap[pz], heap[son]);
pz = son;
}
} while (son);
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
std::cin >> n;
for(int i = 1; i <= n; ++i) {
std::cin >> c;
switch(c) {
case 1: {
std::cin >> x;
heap[++j] = x;
poz[j] = j;
push(j);
break;
}
case 2: {
std::cin >> x;
pop(x);
break;
}
default: std::cout << heap[1] << '\n';
}
}
fclose(stdin);
fclose(stdout);
return 0;
}