Pagini recente » Cod sursa (job #1741246) | Cod sursa (job #2129232) | Cod sursa (job #1636098) | Cod sursa (job #1423744) | Cod sursa (job #407514)
Cod sursa(job #407514)
#include<stdio.h>
#define Nmax 200010
int A[Nmax],Heap[Nmax],p[Nmax],N;
void swap(int i,int j)
{
int aux=Heap[i];
Heap[i]=Heap[j];
Heap[j]=aux;
p[Heap[i]]=i;
p[Heap[j]]=j;
}
void up_heap(int poz)
{
for(; poz>1 ; poz/=2)
if (A[Heap[poz]] < A[Heap[poz/2]])
swap(poz,poz/2);
}
void down_heap(int k)
{
for(int fiu=1;fiu;)
{
fiu=0;
if (2*k<=N)
{
fiu=2*k;
if (2*k+1<=N && A[Heap[fiu]] > A[Heap[2*k+1]])
fiu=2*k+1;
}
if (fiu && A[Heap[k]] > A[Heap[fiu]])
{
swap(k,fiu);
k=fiu;
}
else
fiu=0;
}
}
int main()
{
int M,x,y,poz;
freopen("heap.in","r",stdin);
freopen("heap.out","w",stdout);
scanf("%d",&M);
for(int i=1;i<=M;++i)
{
scanf("%d",&x);
if (x==1)
{
scanf("%d",&A[i]);
p[i]=++N;
Heap[N]=i;
up_heap(N);
}
if (x==2)
{
scanf("%d",&y);
poz=p[y];
swap(poz,N);
--N;
down_heap(poz);
}
if (x==3)
printf("%d\n",A[Heap[1]]);
}
return 0;
}