Pagini recente » Cod sursa (job #2254715) | Cod sursa (job #1673454) | Cod sursa (job #1527773) | Cod sursa (job #2099523) | Cod sursa (job #2153986)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int h[100001],v[100001],poz[1000001],c,n,m,nh;
void swapp(int p, int q)
{
swap(h[p],h[q]);
poz[h[p]]=p;
poz[h[q]]=q;
}
void urca(int p)
{
while(p>1&&v[h[p]]<v[h[p/2]])
{
swapp(p,p/2);
p/=2;
}
}
void coboara(int p)
{
int fs=2*p,fd=2*p+1,bun=p;
if(fs<=nh&&v[h[fs]]<v[h[bun]])
{
bun=fs;
}
if(fd<=nh&&v[h[fd]]<v[h[bun]])bun=fd;
if(bun!=p)
{
swapp(p,bun);
coboara(bun);
}
}
void adauga( int p)
{
h[++nh]=p;
poz[p]=nh;
urca(nh);
}
void sterge(int p)
{
swapp(p,nh--);
urca(p);
coboara(p);
}
int main()
{
int i,j,x,ind=0;
fin>>n;
for(i=1; i<=n; i++)
{
fin>>c;
if(c==1)
{
fin>>x;
ind++;
v[ind]=x;
adauga(ind);
}
else if(c==2)
{
fin>>x;
sterge(poz[x]);
}
else if(c==3)
{
fout<<v[h[1]]<<"\n";
}
}
return 0;
}