Pagini recente » Cod sursa (job #2325247) | Cod sursa (job #2976921) | Cod sursa (job #2859474) | Cod sursa (job #1563968) | Cod sursa (job #1714827)
#include <iostream>
#include <fstream>
using namespace std;
#define nmax 200100
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int h[nmax];
int t[nmax];
int v[nmax];
int n,p,i,m,x,k;
void up(int &x)
{
while(h[x]<h[x/2])
{
swap(t[v[x]],t[v[x/2]]);
swap(v[t[x]],v[t[x/2]]);
swap(h[x],h[x/2]);
x=x/2;
}
}
void down(int &x)
{
while((h[x]>h[2*x] && 2*x<=n) || (h[x]>h[2*x+1] && 2*x+1<=n))
{
if(h[x]>h[2*x])
{
swap(t[v[x]],t[v[x*2]]);
swap(v[t[x]],v[t[x*2]]);
swap(h[x],h[x*2]);
x=x*2;
}
else
{
swap(t[v[x]],t[v[x*2+1]]);
swap(v[t[x]],v[t[x*2+1]]);
swap(h[x],h[x*2+1]);
x=x*2+1;
}
}
}
int main()
{
f>>m;
k=0;
for(i=1; i<=m; ++i)
{
f>>p;
switch(p)
{
case 1:
f>>x;
++n;
++k;
h[n]=x;
t[k]=n;
v[n]=k;
x=n;
up(x);
break;
case 2:
f>>x;
x=t[x];
swap(h[x],h[n]);
swap(v[x],v[n]);
n--;
up(x);
down(x);
break;
case 3:
g<<h[1]<<'\n';
break;
}
}
}