Pagini recente » Cod sursa (job #2343067) | Cod sursa (job #1695274) | Cod sursa (job #1149912) | Cod sursa (job #1862951) | Cod sursa (job #1624627)
#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/2]] > v[heap[i]] && i > 1)
{
swapElements(i, i/2);
i = i/2;
}
}
void deleteElement(int x)
{
heap[in_heap[x]] = 0;
int i = in_heap[x];
in_heap[x] = 0;
while (1)
{
int vmin;
if (2*i > heap_size)
break;
if (2*i == heap_size)
{
heap[i] = heap[2*i];
in_heap[heap[i]] = i;
i = 2*i;
break;
}
vmin = 2*i;
if (v[heap[2*i]] > v[heap[2*i+1]])
vmin++;
heap[i] = heap[vmin];
in_heap[heap[i]] = i;
i = vmin;
}
heap_size--;
}
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);
deleteElement(x);
}
else
{
printf("%d\n", v[heap[1]]);
}
}
return 0;
}