Pagini recente » Cod sursa (job #2623393) | Cod sursa (job #1937801) | Cod sursa (job #2196696) | Cod sursa (job #3232721) | Cod sursa (job #820422)
Cod sursa(job #820422)
#include<cstdio>
#include<algorithm>
#define max 200001
int l,nr;
int v[max],h[max],pos[max];
inline int tata(int i)
{
return i/2;
}
inline int fiu_stanga(int i)
{
return 2*i;
}
inline int fiu_dreapta(int i)
{
return 2*i+1;
}
void schimba(int i, int j)
{
int aux;
aux=h[i];
h[i]=h[j];
h[j]=aux;
pos[h[i]]=i;
pos[h[j]]=j;
}
void urca(int i)
{
if(tata(i)>0&&v[h[i]]<v[h[tata(i)]])
{
schimba(i,tata(i));
}
}
void coboara(int i)
{
int st=fiu_stanga(i),dr=fiu_dreapta(i),b=i;
if(st<=nr&&v[h[st]]<v[h[b]]) b=st;
if(dr<=nr&&v[h[dr]]<v[h[b]]) b=dr;
if(b!=i)
{
schimba(i,b);
}
}
int main()
{
int i,n,cod,a,p,nv=0;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&cod);
if(cod==1)
{
scanf("%d",&a);
v[++nv]=a;
h[++nr]=nv;
pos[nv]=nr;
urca(nr);
}
if(cod==2)
{
scanf("%d",&a);
p=pos[a];
h[p]=h[nr--];
pos[h[p]]=p;
urca(p);
coboara(p);
}
if(cod==3) printf("%d\n",v[h[1]]);
}
return 0;
}