Pagini recente » Cod sursa (job #1383804) | Cod sursa (job #1451240) | Cod sursa (job #280063) | Cod sursa (job #194871) | Cod sursa (job #1873630)
#include <bits/stdc++.h>
#define nmax 200001
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int H[nmax],n;
void comb(int i)
{int v=H[i],tata=i,fiu=2*i;
while(fiu<=n)
{if(fiu<n)
if(H[fiu]>H[fiu+1]) fiu++;
if(v>H[fiu])
{H[tata]=H[fiu];
tata=fiu; fiu=fiu*2;
}
else
fiu=n+1;
}
H[tata]=v;
}
void cer(int k)
{int key=H[k];
while((k>1)&&(key<H[k/2]))
{H[k]=H[k/2];
k=k/2;}
H[k]=key;
}
void elim(int k)
{H[k]=H[n]; --n;
if((k>1)&&(H[k]<H[k/2])) cer(k);
else comb(k);
}
void read()
{int i,cod,x,nr;
f>>nr;
for(i=1;i<=nr;i++)
{f>>cod;
if(cod==1)
{ f>>x;
H[++n]=x;
comb(n);
}
if(cod==2)
{f>>x; g<<H[x]<<" ";
elim(x);
}
if(cod==3)
g<<H[1]<<"\n";
/*for(int j=1;j<=n;j++)
g<<H[j]<<" ";
g<<"\n";
*/
}
}
int main()
{read();
return 0;
}