Pagini recente » Cod sursa (job #1151433) | Cod sursa (job #1893075) | Utilizatori inregistrati la Info Oltenia 2018 Proba Individuala Clasele 11-12 | Cod sursa (job #3209035) | Cod sursa (job #1539637)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int H[200010],elem[200010],n;
int tata(int nod)
{
return nod/2;
}
int fiu_st(int nod)
{
return nod*2;
}
int fiu_dr(int nod)
{
return nod*2+1;
}
void sift(int k)
{
int son;
do{
son=0;
if(fiu_st(k)<=n)
{
son=fiu_st(k);
if(fiu_dr(k)<=n&&H[fiu_dr(k)]<=H[fiu_st(k)])
son = fiu_dr(k);
if (H[son]>H[k])
son=0;
}
if(son)
{
int aux=H[k];
H[k]=H[son];
H[son]=aux;
k=son;
}
} while(son);
}
void percolate(int k)
{
int nod=H[k];
while((k>1)&&(nod<=H[tata(k)]))
{
H[k]=H[tata(k)];
k=tata(k);
}
H[k]=nod;
}
void stergere(int k)
{
int i;
for(i=1;i<=n;i++)
{
if(H[i]==k)
break;
}
H[i]=H[n];
--n;
if((i>1)&&(H[i]<=H[tata(k)]))
percolate(i);
else
sift(i);
}
void inserare(int nod)
{
H[++n]=nod;
percolate(n);
}
int main()
{
int t,nr,x,j=0;
f>>nr;
for(int i=1;i<=nr;i++)
{
f>>t;
if(t==1)
{
f>>x;
elem[++j]=x;
inserare(x);
}
if(t==2)
{
f>>x;
stergere(elem[x]);
}
if(t==3)
{
g<<H[1]<<"\n";
}
}
return 0;
}