Pagini recente » Cod sursa (job #1419637) | Cod sursa (job #2828121) | Cod sursa (job #77693) | Cod sursa (job #186450) | Cod sursa (job #2065723)
#include<fstream>
using namespace std;
int n,l,nr,i,x,cod;
int a[200010],H[200010],p[200010];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void adauga(int x)
{
int aux;
while(x/2 && a[H[x]]<a[H[x/2]])
{
aux=H[x];
H[x]=H[x/2];
H[x/2]=aux;
p[H[x]]=x;
p[H[x/2]]=x/2;
x/=2;
}
}
void elimina(int x)
{
int aux,y=0;
while(x!=y)
{
y=x;
if(y*2<=l && a[H[x]]>a[H[y*2]]) x=y*2;
if(y*2+1<=l && a[H[x]]>a[H[y*2+1]]) x=y*2+1;
aux=H[x];
H[x]=H[y];
H[y]=aux;
p[H[x]]=x;
p[H[y]]=y;
}
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>cod;
if(cod<3)
{
f>>x;
}
if(cod==1)
{
l++;nr++;
a[nr]=x;
H[l]=nr;
p[nr]=l;
adauga(l);
}
if(cod==2)
{
a[x]=-1;
adauga(p[x]);
p[H[1]]=0;
H[1]=H[l--];
p[H[1]] = 1;
if(l>1) elimina(1);
}
if(cod==3) g<<a[H[1]]<<"\n";
}
f.close();
g.close();
return 0;
}