Pagini recente » Cod sursa (job #2534396) | Cod sursa (job #2957976) | Cod sursa (job #268328) | Cod sursa (job #2047755) | Cod sursa (job #235573)
Cod sursa(job #235573)
#include<stdio.h>
# define maxel 1000000005
struct Nod {
int val;
int intr;
};
int n;
int nh;
int t;
Nod heap[400005];
int sir[200005];
int x;
int Down(int p)
{
int l = 2 * p;
int r = 2 * p + 1;
int poz = l;
int min = heap[l].val;
if (l > nh) return 0;
if (r <= nh)
if (min > heap[r].val)
{
min = heap[r].val;
poz = r;
}
if (min < heap[p].val)
{
Nod aux;
aux = heap[poz];
heap[poz] = heap[p];
heap[p] = aux;
int ax;
ax = sir[heap[poz].intr];
sir[heap[poz].intr] = sir[heap[p].intr];
sir[heap[p].intr] = ax;
Down(poz);
}
return 0;
}
int Up(int x)
{
Nod aux;
while (heap[x/2].val > heap[x].val)
{
aux = heap[x/2];
heap[x/2] = heap[x];
heap[x] = aux;
int ax;
ax = sir[heap[x].intr];
sir[heap[x].intr] = sir[heap[x/2].intr];
sir[heap[x/2].intr] = ax;
x /= 2;
}
return x;
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(int i = 1; i <= n; i++)
{
scanf("%d",&t);
if (t == 1)
{
scanf("%d",&x);
nh++;
heap[nh].val = x;
heap[nh].intr = sir[0] + 1;
sir[++sir[0]] = Up(nh);
}
if (t == 2)
{
scanf("%d",&x);
heap[sir[x]].val = maxel;
Down(sir[x]);
nh--;
}
if (t == 3)
{
printf("%d \n",heap[1].val);
}
}
return 0;
}