Pagini recente » Cod sursa (job #2464903) | Cod sursa (job #3176236) | Cod sursa (job #2963014) | Cod sursa (job #3197308) | Cod sursa (job #1310492)
#include <fstream>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int h[100],intrare[100],n,i,tip,x,nrelecur,nrele,poz[100];
void schimb(int x, int y)
{
int aux = h[x];
h[x] = h[y];
h[y] = aux;
poz[h[x]] = x;
poz[h[y]] = y;
}
void urcare(int p)
{
while(p > 1 && intrare[h[p]] < intrare[h[p/2]])
{
schimb(p, p/2);
p /= 2;
}
}
void coboarare(int x)
{
int st = 2*x, dr = 2*x + 1, r = x;
if (st<=nrelecur && intrare[h[st]]<intrare[h[r]])
r=st;
if (dr<=nrelecur && intrare[h[dr]]<intrare[h[r]])
r=dr;
if (r!=x)
{
schimb(r,x);
coboarare(x);
}
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>tip;
if(tip==1)
{
fin>>x;
nrele++;
nrelecur++;
intrare[nrele]=x;
h[nrelecur]=nrele;
poz[h[nrelecur]]=nrelecur;
urcare(nrelecur);
}
else if(tip==2)
{
fin>>x;
x = poz[x];
schimb(x,nrelecur--);
urcare(x);
coboarare(x);
}
else
fout<<intrare[h[1]]<<"\n";
}
return 0;
}