Pagini recente » Cod sursa (job #112262) | Cod sursa (job #2295768) | Cod sursa (job #2907065) | Borderou de evaluare (job #156924) | Cod sursa (job #1577816)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
struct
{
int val,poz;
} H[200005];
int nr,v[200005],n,cod;
void combinare(int i)
{
int inf=H[i].val,p=H[i].poz;
int fiu=2*i,tata=i;
while(fiu<=nr)
{
if(fiu+1<=nr && H[fiu].val>H[fiu+1].val) fiu++;
if(H[fiu].val<inf)
{
v[H[fiu].poz]=tata;
H[tata]=H[fiu];
tata=fiu;
fiu=tata*2;
}
else
break;
}
H[tata].val=inf;
H[tata].poz=p;
v[p]=tata;
}
void inserare(int inf)
{
int tata,fiu;
fiu=nr;
tata=nr/2;
while(inf<H[tata].val && tata>0)
{
v[H[tata].poz]=fiu;
H[fiu]=H[tata];
fiu=tata;
tata=fiu/2;
}
H[fiu].val=inf;
H[fiu].poz=nr;
v[nr]=fiu;
}
int main()
{
int inf;
fin>>n;
for(int i=1; i<=n; i++)
{
fin>>cod;
if(cod<3)
{
fin>>inf;
if(cod==1)
{
nr++;
inserare(inf);
}
else
{
H[v[inf]]=H[nr--];
combinare(v[inf]);
}
}
else
fout<<H[1].val<<'\n';
}
return 0;
}