Pagini recente » Cod sursa (job #598275) | Cod sursa (job #2647243) | Cod sursa (job #1249127) | Cod sursa (job #154687) | Cod sursa (job #830493)
Cod sursa(job #830493)
#include <iostream>
#include<fstream>
using namespace std;
int z[200002],pozh[200002],poz[200002];
class heap{
public:
int x[200002];
int n;
void insert(int a,int q)
{
n++;
x[n]=a;
pozh[n]=q;
int i=n,aux;
while(x[i]<x[i/2]&&i/2>=1)
{
aux=pozh[i];
pozh[i]=pozh[i/2];
pozh[i/2]=aux;
poz[pozh[i/2]]=i/2;
poz[pozh[i]]=i;
aux=x[i];
x[i]=x[i/2];
x[i/2]=aux;
i=i/2;
}
}
void remove(int i)
{
x[i]=x[n];
n--;
int aux,k;
while(1)
{
k=i;
if(x[i]>x[i*2]&&i*2<=n)
k=i*2;
if(x[k]>x[i*2+1]&&i*2+1<=n)
k++;
aux=pozh[i];pozh[i]=pozh[k];pozh[k]=aux;
poz[pozh[k]]=k;
poz[pozh[i]]=i;
aux=x[i],x[i]=x[k];x[k]=aux;
if(i==k)
break;
i=k;
}
}
};
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
heap h;
int i,a,n,b,k=0;
scanf("%d",&n);
h.n=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a);
if(a==1)
{
scanf("%d",&z[++k]);
poz[k]=k;
h.insert(z[k],k);
}
else
if(a==2)
{
scanf("%d",&b);
h.remove(poz[b]);
}
else
printf("%d\n",h.x[1]);
}
return 0;
}