Pagini recente » Cod sursa (job #1985967) | Cod sursa (job #1510581) | Cod sursa (job #1648226) | Cod sursa (job #2131284) | Cod sursa (job #1979460)
#include <cstdio>
using namespace std;
int h[200000],poz[200000],nh,v[200000];
void schimba(int p,int q) {
int aux=h[p];
h[p]=h[q];
h[q]=aux;
poz[h[p]]=p;
poz[h[q]]=q;
}
void coboara(int p) {
int fs=2*p,fd=2*p+1,bun=p;
if (fs<=nh && v[h[fs]]<v[h[bun]])
bun=fs;
if (fd<=nh && v[h[fd]]<v[h[bun]])
bun=fd;
if (bun!=p) {
schimba(p,bun);
coboara(bun);
}
}
void urca(int p) {
if (p>1 && v[h[p]]<v[h[p/2]]) {
schimba(p,p/2);
urca(p/2);
}
}
void sterge(int p) {
schimba(p,nh--);
urca(p);
coboara(p);
}
void adauga(int x) {
h[++nh]=x;
poz[x]=nh;
urca(nh);
}
int main()
{
int n,i,a,tip,nrad,p;
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d", &n);
nrad=0;
nh=0;
for (i=0;i<n;i++) {
scanf("%d", &tip);
if (tip==1) {
scanf("%d", &v[++nrad]);
adauga(nrad);
}
if (tip==2) {
scanf("%d", &p);
sterge(poz[p]);
}
if (tip==3)
printf("%d\n", v[h[1]]);
}
return 0;
}