Pagini recente » Cod sursa (job #3140908) | Cod sursa (job #389117) | Cod sursa (job #730334) | Cod sursa (job #1545953) | Cod sursa (job #1197441)
#include <cstdio>
#include <algorithm>
#define infinit 1<<30
#define maxn 200005
using namespace std;
FILE *f=fopen("heapuri.in","r");
FILE *g=fopen("heapuri.out","w");
int n,nr,a[maxn],v[maxn],pos[maxn];
inline void urca(int nod)
{while (nod>1&&v[nod]<v[nod/2])
{swap(pos[a[nod]],pos[a[nod/2]]);
swap(a[nod],a[nod/2]);
swap(v[nod],v[nod/2]);
nod=nod/2;
}
}
inline void coboara(int nod)
{int son=0;
if (nod*2<=nr) son=nod*2;
if (nod*2+1<=nr&&v[nod*2+1]<v[son]) son=nod*2+1;
if (son!=0) {swap(pos[a[nod]],pos[a[son]]);
swap(a[nod],a[son]);
swap(v[nod],v[son]);
coboara(son);
}
}
int main()
{int i,j,op,x;
fscanf(f,"%d",&n);
v[0]=infinit;
for (i=1;i<=n;i++) {fscanf(f,"%d",&op);
if (op==1) {fscanf(f,"%d",&x);
++nr;
v[nr]=x;
a[nr]=nr;
pos[nr]=nr;
urca(nr);
} else
if (op==2) {fscanf(f,"%d",&x);
v[pos[x]]=infinit;
coboara(pos[x]);
}
else fprintf(g,"%d\n",v[1]);
}
return 0;
}