Pagini recente » Cod sursa (job #2922015) | Cod sursa (job #1753723) | Cod sursa (job #2608647) | Cod sursa (job #926160) | Cod sursa (job #820309)
Cod sursa(job #820309)
#include <iostream>
#include <fstream>
#define max 200020
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int N,l,nr;
int v[max],h[max],pos[max];
void schimba(int i, int j)
{
int aux;
aux=h[i];
h[i]=h[j];
h[j]=aux;
pos[h[i]]=i;
pos[h[j]]=j;
}
void urca(int i)
{
if ( i/2>0 && v[h[i]]<v[h[i/2]])
{
schimba(i,i/2);
urca(i/2);
}
}
void coboara (int i)
{
int fst=2*i;
int fdr=2*i+1;
int fbun=i;
if (fst<=nr && v[h[fst]]<v[h[fbun]]) fbun=fst;
if (fdr<=nr && v[h[fdr]]<v[h[fbun]]) fbun=fdr;
if (fbun!=i)
{
schimba(i,fbun);
coboara(fbun);
}
}
int main()
{
int i,n,cod,a,p,nv=0;
in>>n;
for (i=1;i<=n;i++)
{
in>>cod;
if (cod==3) out<<v[h[1]]<<"\n";
else
if (cod==1)
{
in>>a;
v[++nv]=a;
h[++nr]=nv;
pos[nv]=nr;
urca(nr);
}
else
if (cod==2)
{
in>>a;
p=pos[a];
h[p]=h[nr--];
pos[h[p]]=p;
urca(p);
coboara(p);
}
}
return 0;
}