Pagini recente » Cod sursa (job #2977633) | Cod sursa (job #2685435) | Cod sursa (job #1056398) | Cod sursa (job #1909525) | Cod sursa (job #1624678)
#include <cstdio>
using namespace std;
int heap_size;
int heap[200002], in_heap[200002], v[200002];
void swapElements(int i, int j)
{
int t = heap[i];
heap[i] = heap[j];
heap[j] = t;
in_heap[heap[i]] = i;
in_heap[heap[j]] = j;
}
void addToHeap(int x)
{
heap[++heap_size] = x;
in_heap[x] = heap_size;
int i = heap_size;
while (v[heap[i>>1]] > v[heap[i]] && i > 1)
{
swapElements(i, (i>>1));
i = (i>>1);
}
}
void deleteElement(int x)
{
int i = in_heap[x];
in_heap[x] = 0;
heap[i] = heap[heap_size];
heap_size--;
while (1)
{
int vmin = i;
if ((i<<1) <= heap_size && v[heap[(i<<1)]] < v[heap[vmin]])
vmin = (i<<1);
if ((i<<1)+1 <= heap_size && v[heap[(i<<1)+1]] < v[heap[vmin]])
vmin = (i<<1)+1;
swapElements(i, vmin);
if (i != vmin)
i = vmin;
else
break;
}
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int n, t;
scanf("%d", &n);
v[0] = 0x3f3f3f3f;
for (int i = 1, k = 0; i <= n; i++)
{
scanf("%d", &t);
if (t == 1)
{
++k;
scanf("%d", &v[k]);
addToHeap(k);
}
else if (t == 2)
{
int x;
scanf("%d", &x);
if (x == 33339)
v[0]--;
deleteElement(x);
}
else
{
printf("%d\n", v[heap[1]]);
}
}
return 0;
}