Pagini recente » Cod sursa (job #995083) | Cod sursa (job #1047802) | Cod sursa (job #1201715) | Cod sursa (job #33526) | Cod sursa (job #1577181)
#include <fstream>
using namespace std;
ifstream fin("heap.in");
ofstream fout("heap.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){
H[tata].val=H[fiu].val;
v[H[tata].poz]=fiu;
H[tata].poz=H[fiu].poz;
v[H[fiu].poz]=tata;
tata=fiu;
fiu=tata*2;
}
else
break;
}
H[tata].val=inf;
H[tata].poz=p;
}
void inserare(int inf,int i){
int tata,fiu;
fiu=nr;
if(nr>1)
tata=nr/2;
while(inf<H[tata].val && tata>0){
H[fiu].val=H[tata].val;
v[H[fiu].poz]=tata;
H[fiu].poz=H[tata].poz;
v[H[tata].poz]=fiu;
fiu=tata;
tata=fiu/2;
}
H[fiu].val=inf;
H[fiu].poz=i;
}
int main()
{
int inf;
fin>>n;
for(int i=1;i<=n;i++){
fin>>cod;
if(cod<3)
{
fin>>inf;
if(cod==1)
{
nr++;
v[i]=nr;
inserare(inf,i);
}
else
{
H[v[i]].val=H[nr].val;
v[nr--]=v[i];
combinare(v[i]);
v[i]=0;
}
}
else
fout<<H[1].val<<'\n';
}
return 0;
}