Pagini recente » Cod sursa (job #77397) | Cod sursa (job #27818) | Cod sursa (job #1888506) | Cod sursa (job #2230632) | Cod sursa (job #1695533)
#include<iostream>
#include<fstream>
#include<set>
#define DX 200010
using namespace std;
fstream fin("heapuri.in",ios::in),fout("heapuri.out",ios::out);
int cine[DX],cn,h[DX],n=0,poz,pecine;
void up(int nod)
{
int tata=nod/2;
while(nod!=1 && h[tata]>h[nod])
{
swap(h[tata],h[nod]);
nod=tata;
tata=nod/2;
}
}
void down(int nod)
{
int fiu,copil;
do
{
fiu=2*nod;
copil=0;
if(fiu<=n)
{
copil=fiu;
if(fiu<n && h[fiu+1]<h[copil]) copil=fiu+1;
if(h[copil]>h[nod]) copil=0;
}
if(copil!=0)
{
swap(h[copil],h[nod]);
nod=copil;
}
}while(copil!=0);
}
void find(int nod)
{
int fiu1=nod*2,fiu2=nod*2+1;
if(poz!=0) return ;
if(h[nod]==pecine) poz=nod;
if(fiu1<=n && h[fiu1]<=pecine) find(fiu1);
if(fiu2<=n && h[fiu2]<=pecine) find(fiu2);
}
int main()
{
int m,i,j,a,b,t;
fin>>m;
for(i=1;i<=m;i++)
{
fin>>t;
if(t==1)
{
fin>>a;
cine[++cn]=a;
n++;
h[n]=a;
up(n);
}
if(t==2)
{
fin>>a;
pecine=cine[a];
poz=0;
find(1);
h[poz]=h[n];
n--;
down(poz);
}
if(t==3)
{
fout<<h[1]<<"\n";
}
}
}