Pagini recente » Cod sursa (job #2730620) | Cod sursa (job #2287996) | Cod sursa (job #374660) | Cod sursa (job #2563250) | Cod sursa (job #581912)
Cod sursa(job #581912)
#include <fstream.h>
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,tip,i,x,Heap[200001],vf=0,j,poz[200001],cand[200001],aux,c,q;
void swap(int a, int b)
{
int aux;
aux=Heap[a];
Heap[a]=Heap[b];
Heap[b]=aux;
aux=poz[cand[a]];
poz[cand[a]]=poz[cand[b]];
poz[cand[b]]=aux;
aux=cand[a];
cand[a]=cand[b];
cand[b]=aux;
}
void percolate(int k)
{
int key = Heap[k];
while(k>1 && key < Heap[k/2])
{
swap(k,k/2);
k/=2;
}
}
void sift(int k)
{
int son;
do{
son=0;
if(k+k<=vf)
{
son=k+k;
if(son<vf && Heap[son+1]<Heap[son])
++son;
if(Heap[son]>Heap[vf])
son=0;
}
if(son)
{
swap(k,son);
k=son;
}
}while(son);
}
void sterge(int k)
{
swap(k,vf);
vf--;
if(Heap[k]<Heap[k/2])
percolate(k);
else
sift(k);
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>tip;
if(tip==3)
g<<Heap[1]<<'\n';
else
{
f>>x;
if(tip==1)
{
Heap[++vf]=x;
poz[++c]=vf;
cand[vf]=c;
percolate(vf);
}
else
sterge(poz[x]);
}
}
f.close();
g.close();
return 0;
}