Pagini recente » Cod sursa (job #2042567) | Cod sursa (job #1542654) | Cod sursa (job #1813027) | Cod sursa (job #1213885) | Cod sursa (job #404527)
Cod sursa(job #404527)
#include<stdio.h>
#define Nmax 200010
int v[Nmax],h[Nmax],poz[Nmax],q,n,N,i,x,op;
void swap(int i, int j)
{
int aux;
poz[h[i]]=j;
poz[h[j]]=i;
aux=h[i]; h[i]=h[j]; h[j]=aux;
}
int pozmin(int i)
{
if( (i<<1)+1 <= N)
if( v[h[1+(i<<1)]] < v[h[i<<1]] ) return 1+(i<<1);
return i<<1;
}
void down (int i)
{
int k;
if( i <= (N>>1) )
{
k=pozmin(i);
if(v[h[k]]<v[h[i]])
{
swap(i,k);
down(k);
}
}
}
void up(int i)
{
if(i>1)
{
if(v[h[i>>1]]>v[h[i]])
{
swap(i,i>>1);
up(i>>1);
}
}
}
void pop(int i)
{
swap(i,N);
N--;
down(i);
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&op);
if(op==1)
{
scanf("%d",&x);
v[++q]=x;
h[++N]=q;
poz[q]=N;
up(N);
}
else if(op==2)
{
scanf("%d",&x);
pop(poz[x]);
}
else
printf("%d\n",v[h[1]]);
}
return 0;
}