Pagini recente » Cod sursa (job #438023) | Cod sursa (job #1839927) | Cod sursa (job #896604) | Cod sursa (job #905890) | Cod sursa (job #319519)
Cod sursa(job #319519)
#include <cstdio>
#define file_in "heapuri.in"
#define file_out "heapuri.out"
#define Nmax 200100
int N,n,i,t,x,v[Nmax],p[Nmax],h[Nmax],nr,aux,tip;
inline void up(int x)
{
int tata,fiu;
fiu=x;
tata=x>>1;
while (fiu!=1 && v[h[fiu]]<v[h[tata]])
{
aux=h[fiu];
h[fiu]=h[tata];
h[tata]=aux;
p[h[tata]]=tata;
p[h[fiu]]=fiu;
fiu=tata;
tata=fiu>>1;
}
}
inline void down(int x)
{
int fiu,tata;
tata=x;
fiu=x<<1;
while(fiu<=n && v[h[tata]]>v[h[fiu]])
{
aux=h[fiu];
h[fiu]=h[tata];
h[tata]=aux;
p[h[tata]]=tata;
p[h[fiu]]=fiu;
tata=fiu;
fiu=tata<<1;
if(fiu<n && v[h[fiu]]>v[h[fiu+1]])
fiu++;
}
}
int main()
{
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d", &N);
for(i=1;i<=N;++i)
{
scanf("%d", &tip);
if (tip==1)
{
scanf("%d", &x);
nr++;
n++;
v[nr]=x;
h[n]=nr;
p[nr]=n;
up(n);
}
else
if (tip==2)
{
scanf("%d", &x);
h[p[x]]=h[n];
p[h[p[x]]]=p[x];
n--;
down(p[x]);
}
else
{
printf("%d\n", v[h[1]]);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}