Pagini recente » Cod sursa (job #143434) | Cod sursa (job #1059705) | Cod sursa (job #1221821) | Cod sursa (job #836630) | Cod sursa (job #342991)
Cod sursa(job #342991)
#include <stdio.h>
#define DIM 200005
int c[DIM], h[DIM], poz[DIM];
int n,m,nr;
void swap(int &x, int &y)
{
int tmp=x;
x=y;
y=tmp;
}
void upheap(int nod)
{
if (nod>1)
if (c[h[nod]]<c[h[nod/2]])
{
swap(poz[h[nod]],poz[h[nod/2]]);
swap(h[nod],h[nod/2]);
upheap(nod/2);
}
}
void insert(int nod)
{
c[++n]=nod;
h[++nr]=n;
poz[n]=nr;
upheap(nr);
}
void downheap(int nod)
{
int min=nod;
if (nr>=2*nod) if (c[h[nod*2]]<c[h[min]]) min=nod*2;
if (nr>=2*nod+1) if (c[h[nod*2+1]]<c[h[min]]) min=nod*2+1;
if (min!=nod)
{
swap(h[nod],h[min]);
poz[h[min]]=min;
poz[h[nod]]=nod;
downheap(min);
}
}
void cut(int nod)
{
c[h[poz[nod]]]=-1;
upheap(poz[nod]);
h[1]=h[nr--];
downheap(1);
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int i,car,p;
scanf("%d",&m);
for (i=1; i<=m; ++i)
{
scanf("%d",&car);
if (car==1)
{
scanf("%d",&p);
insert(p);
}
else if (car==2)
{
scanf("%d",&p);
cut(p);
}
else printf("%d\n",c[h[1]]);
}
return(0);
}