Pagini recente » Cod sursa (job #1553163) | Cod sursa (job #2055283) | Cod sursa (job #1213877) | Cod sursa (job #423686) | Cod sursa (job #2270108)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int v[200005],heap[200005],v1[200005];
void heapup(int x)
{
if (x>1)
{
if (v1[heap[x]]<v1[heap[x/2]])
{
swap(heap[x],heap[x/2]);
heapup(x/2);
}
}
}
void heapdown(int x,int u)
{
int st,dr;
if (x*2<=u)
{
st=v1[heap[x*2]];
if (2*x+1<=u)
{
dr=v1[heap[x*2+1]];
}
else
{
dr=st+1;
}
if (min(st,dr)<v1[heap[x]])
{
if (st<dr)
{
swap(heap[x],heap[2*x]);
heapdown(2*x,u);
}
else
{
swap(heap[x],heap[2*x+1]);
heapdown(2*x+1,u);
}
}
}
}
int n,q,i,x,nr,poz,j;
int main()
{
f>>n;
q=0;
for (i=1;i<=n;i++)
{
f>>x;
if (x==1)
{
f>>nr;
q++;
v1[q]=nr;
heap[q]=q;
heapup(q);
}
else
if (x==2)
{
f>>poz;
for (j=1;j<=q;j++)
{
if (heap[j]==poz)
{
swap(heap[j],heap[q]);
q--;
heapdown(j,q);
break;
}
}
}
else
{
g<<v1[heap[1]]<<'\n';
}
}
return 0;
}