Pagini recente » Cod sursa (job #178582) | Cod sursa (job #280991)
Cod sursa(job #280991)
#include<fstream.h>
#define xx 200001
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int h[xx],n,p[xx],pi[xx],nr;
inline void schimba(int i,int j)
{
int aux;
aux=pi[p[i]]; pi[p[i]]=pi[p[j]]; pi[p[j]]=aux;
aux=p[i]; p[i]=p[j]; p[j]=aux;
aux=h[i]; h[i]=h[j]; h[j]=aux;
}
void jos(int i)
{
int k=-1;
if(p[2*i] && p[2*i+1])
k=(h[2*i]<h[2*i+1] ? 2*i : 2*i+1);
else
if(p[2*i] && !p[2*i+1])
k=2*i;
else
if(!p[2*i] && p[2*i+1])
k=2*i+1;
if(k!=-1 && h[i]>h[k])
{
schimba(i,k);
jos(k);
}
}
void sus(int i)
{
int k=i/2;
if(k && h[k]>h[i])
{
schimba(i,k);
sus(k);
}
}
void sterge(int i)
{
int k=p[n];
schimba(pi[i],n);
p[pi[i]]=0;
h[pi[i]]=0;
pi[i]=0;
n--;
jos(pi[k]);
}
int main()
{
int op,i,x;
fin>>nr;
for(i=1;i<=nr;i++)
{
fin>>op;
if(op==1)
{
fin>>x;
pi[++n]=n;
p[n]=n;
h[n]=x;
sus(n);
}
else
if(op==2)
{
fin>>x;
sterge(x);
}
else
fout<<h[1]<<'\n';
}
fout.close();
return 0;
}