Pagini recente » Cod sursa (job #1795929) | Cod sursa (job #3215235) | Cod sursa (job #3169989) | Cod sursa (job #1349570) | Cod sursa (job #761553)
Cod sursa(job #761553)
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 10001
int heap[maxn],poz[maxn],nh,nr,v[maxn] ;
int n,m ;
void schimba(int a,int b)
{
swap ( heap[a] , heap[b] ) ;
poz[ heap[a] ] = a ;
poz[ heap[b] ] = b ;
}
void up(int p)
{
while( p > 1 && v[ heap[p] ] < v[ heap[p/2] ] )
{
schimba ( p , p/2 ) ;
p /= 2 ;
}
}
void down(int p)
{
int fiust = 2 * p ;
int fiudr = 2 * p + 1 ;
int pmin = p ;
if( fiust <= nh && v[ heap[fiust] ] < v[ heap[pmin] ] )
pmin = fiust ;
if( fiudr <= nh && v[ heap[fiudr] ] < v[ heap[pmin] ] )
pmin = fiudr ;
if( p != pmin )
{
schimba( p , pmin ) ;
down ( pmin ) ;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
int op ;
scanf("%d",&op);
if( op==3 )
{
printf("%d\n",v[heap[1]]);
continue;
}
int x ;
scanf("%d",&x);
if( op == 1 )
{
v[++nr] = x ;
heap[++nh] = nr ;
poz[nr] = nh ;
up ( nh ) ;
}
else
{
int aux = poz[x] ;
schimba ( poz[x] , nh-- ) ;
down ( aux ) ;
}
}
return 0;
}