Pagini recente » Cod sursa (job #77639) | Cod sursa (job #1989497) | Cod sursa (job #3245248) | Cod sursa (job #2366676) | Cod sursa (job #1695902)
#include<iostream>
#include<fstream>
#include<set>
#define DX 200010
using namespace std;
fstream fin("heapuri.in",ios::in),fout("heapuri.out",ios::out);
int h[DX],n,nr,x[DX],poz[DX];
void up(int nod)
{
int tata=nod/2;
while(nod>1 && x[h[nod]]<x[h[tata]])
{
swap(poz[h[nod]],poz[h[tata]]);
swap(h[nod],h[tata]);
nod=tata;
tata=nod/2;
}
}
void down(int nod)
{
int fiu,plod;
do
{
plod=0;
fiu=2*nod;
if(fiu<=n)
{
plod=fiu;
if(fiu<n && x[h[fiu+1]]<x[h[fiu]]) plod=fiu+1;
if(x[h[plod]]>x[h[nod]]) plod=0;
}
if(plod!=0)
{
swap(poz[h[nod]],poz[h[plod]]);
swap(h[nod],h[plod]);
nod=plod;
}
}while(plod!=0);
}
int main()
{
int m,i,j,a,b,t,auxa,auxp;
fin>>m;
for(i=1;i<=m;i++)
{
fin>>t;
if(t==1)
{
fin>>a;
n++;
nr++;
h[n]=nr;
poz[nr]=n;
x[nr]=a;
up(n);
}
if(t==2)
{
fin>>a;
auxa=x[h[poz[a]]];
auxp=poz[a];
h[auxp]=h[n];
poz[h[n]]=auxp;
n--;
poz[a]=-1;
if(auxa>x[h[auxp]])
up(auxp);
else
down(auxp);
}
if(t==3)
{
fout<<x[h[1]]<<"\n";
}
}
}