Pagini recente » Cod sursa (job #1365236) | Cod sursa (job #2789520) | Cod sursa (job #1192618) | Cod sursa (job #2185739) | Cod sursa (job #1615430)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int maxn=200005;
typedef int Heap[maxn];
int n,tip,x,nr;
Heap H;
void upheap(int nod)
{
int k=H[nod];
while(nod>1 && k>H[nod/2])
{
H[nod]=H[nod/2];
nod/=2;
}
H[nod]=k;
}
void downheap(int nod, int nr)
{
int s=0;
do
{
s=0;
if(nod*2<=nr)
{
s=nod*2;
if(nod*2+1 <= nr && H[nod*2+1]>H[nod*2])
s=nod*2+1;
if(H[s]<=H[nod]) s=0;
}
if(s)
{
swap(H[s],H[nod]);
nod=s;
}
}while(s);
}
void sterge(int &nr, int nod)
{
H[nod]=H[nr];
nr--;
if(nod>1 && H[nod]>H[nod/2])
upheap(nod);
else downheap(nr, nod);
}
int main()
{
f>>n;
while(n--)
{
f>>tip;
if(tip==1) {f>>x; H[++nr]=-x; upheap(nr);}
if(tip==2) {f>>x; sterge(nr,-x);}
if(tip==3) g<<-H[1]<<'\n';
}
g.close();
return 0;
}