Pagini recente » Cod sursa (job #1858917) | Cod sursa (job #1853972) | Cod sursa (job #818819) | Cod sursa (job #180053) | Cod sursa (job #1766276)
#include<bits/stdc++.h>
using namespace std;
#define N 200050
int n, h[N], k, ind[N], ord=0;
void addnode(int x, int index)
{
h[index] = x;
int i = index;
ord++;
ind[ord] = x;
while (h[i] < h[i/2] && i >= 1){
swap(h[i], h[i/2]);
i = i/2;
}
}
int search(int x, int index, int i)
{
if (h[i] == ind[x]) return i;
return search(x, index, i*2);
return search(x, index, i*2+1);
}
void minheapify(int i)
{
int l = 2*i;
int r = 2*i +1;
int smallest;
if (l <= k && h[l] < h[i]) smallest = l;
else smallest = i;
if (r <= k && h[r] < h[smallest]) smallest = r;
if (smallest != i)
{
swap(h[i], h[smallest]);
minheapify(smallest);
}
}
void extract(int x, int index)
{
int i = search( x, index, 1);
swap(h[i], h[index]);
h[index] = 0;
k--;
minheapify(i);
}
int main()
{
freopen("heap.in", "r", stdin);
freopen("heap.out", "w", stdout);
scanf("%d", &n);
int i, x, y;
k = 0;
for (i = 0; i<n; i++) {
scanf("%d", &x);
if (x == 1){
scanf("%d", &y);
addnode(y, ++k);
}
if (x == 2) {
scanf("%d", &y);
extract(y, k);
}
if (x == 3) printf("%d\n", h[1]);
}
return 0;
}