Pagini recente » Cod sursa (job #68808) | Cod sursa (job #1965933) | Cod sursa (job #2192030) | Cod sursa (job #2834527) | Cod sursa (job #505915)
Cod sursa(job #505915)
#include<cstdio>
#define Nmx 200001
using namespace std;
int poz[Nmx*4],A[Nmx*4],H[Nmx*4];
int n,nr;
void up(int k)
{
while(k>1)
{
if(A[H[k/2]]<=A[H[k]])
break;
int aux=H[k/2];
H[k/2]=H[k];
H[k]=aux;
poz[H[k]]=k;
poz[H[k/2]]=k/2;
k/=2;
}
}
void down(int k)
{
while(k*2<=nr)
{
int t=k*2;
if(t+1<=nr&&A[H[t]]>A[H[t+1]])
t=t+1;
int aux=H[t];
H[t]=H[k];
H[k]=aux;
poz[H[k]]=k;
poz[H[t]]=t;
k=t;
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
int t,x,nrp=0;
for(int i=1;i<=n;++i)
{
scanf("%d",&t);
if(t==3)
printf("%d\n",A[H[1]]);
else if(t==1)
{
nrp++;
scanf("%d",&x);
A[nrp]=x;
H[++nr]=nrp;
poz[nrp]=nr;
up(nr);
}
else if(t==2)
{
scanf("%d",&x);
A[x]=-1;
up(poz[x]);
poz[H[1]]=0;
H[1]=H[nr--];
poz[H[1]]=1;
if(nr>1) down(1);
}
}
return 0;
}