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