Pagini recente » Cod sursa (job #1907206) | Cod sursa (job #2458707) | Cod sursa (job #3160288) | Cod sursa (job #1867460) | Cod sursa (job #1695614)
#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])
{
if(nod>1 && h[tata]>h[nod])
{
swap(h[tata],h[nod]);
nod=tata;
}
tata=nod/2;
}
}
void down(int nod)
{
int fiu1,fiu2,copil;
do
{
copil=0;
fiu1=2*nod;
if(fiu1<=n)
{
copil=fiu1;
if(fiu1<n && h[fiu1+1]<h[fiu1]) copil=fiu1+1;
if(h[copil]>=h[nod]) copil=0;
}
if(copil)
{
swap(h[nod],h[copil]);
nod=copil;
}
}while(copil!=0);
}
void find(int nod)
{
int fiu=2*nod;
if(poz!=0) return ;
if(fiu<=n && h[fiu] <= pecine ) find(fiu);
if(fiu<n && h[fiu+1] <= pecine ) find(fiu+1);
//if(fiu<=n) find(fiu);
//if(fiu<n) find(fiu+1);
}
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";
}
}
}