Pagini recente » Cod sursa (job #1365698) | Cod sursa (job #883159) | Cod sursa (job #336360) | Cod sursa (job #1400414) | Cod sursa (job #703449)
Cod sursa(job #703449)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("heapuri.in");
#define nmax 200002
int dimh=0,dimv=0,pozh[nmax],H[nmax],x[nmax],a,b,n;
void urca(int nod)
{
if(nod==1) return;
int tata=nod/2;
if(x[H[nod]]>=x[H[tata]]) return ;
swap(H[nod], H[tata]);
swap(pozh[H[nod]], pozh[H[tata]]);
urca(pozh[H[tata]]);
}
void coboara(int nod)
{
int fiu1=nod*2;
int fiu2=nod*2+1;
int nodmin=nod;
if(x[H[fiu1]]<x[H[nodmin]] && fiu1<=dimh)
nodmin=fiu1;
if(x[H[fiu1]]>x[H[nodmin]] && fiu2<=dimh)
nodmin=fiu2;
if(nod==nodmin) return;
swap(H[nod],H[nodmin]);
swap(pozh[H[nod]], pozh[H[nodmin]]);
coboara(pozh[H[nodmin]]);
}
void inserare()
{
f>>b;
dimv++;
x[dimv]=b;
H[++dimh]=dimv;
pozh[dimv]=dimh;
urca(pozh[H[dimh]]);
}
void stergere(int nod)
{
swap(H[nod],H[dimh]);
swap(pozh[H[nod]],pozh[H[dimh]]);
dimh--;
urca(pozh[H[nod]]);
coboara(pozh[H[nod]]);
}
int main()
{
ofstream g("heapuri.out");
f>>n;
for(int i=1;i<=n;i++)
{
f>>a;
if(a==1) inserare();
if(a==2)
{
f>>b;
stergere(pozh[b]);
}
if(a==3) g<<x[H[1]]<<"\n";
}
}