Pagini recente » Cod sursa (job #2892358) | Cod sursa (job #2557362) | Cod sursa (job #2442558) | Cod sursa (job #1622499) | Cod sursa (job #2496835)
#include<cstdio>
#include<algorithm>
using namespace std;
FILE*in=fopen("heapuri.in","r");
FILE*out=fopen("heapuri.out","w");
int n,i,v[200003],ct=0,a,k,ver[200003],b,l;
int main()
{
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
{
ver[i]=i;
}
for(i=1;i<=n;i++)
{
fscanf(in,"%d",&a);
if(a==1)
{
ct++;
fscanf(in,"%d",&v[ct]);
k=ct;
while(v[k]<v[k/2])
{
swap(v[k],v[k/2]);
swap(ver[k],ver[k/2]);
k=k/2;
}
}
if(a==2)
{
fscanf(in,"%d",&b);
swap(v[ct],v[ver[b]]);
k=ver[b];
l=ver[b];
while(v[k]<v[k/2])
{
swap(v[k],v[k/2]);
swap(ver[k],ver[k/2]);
k=k/2;
}
while((v[l]>v[2*l]||v[l]>v[2*l+1])&&l<=ct/2)
{
if(v[2*l]<=v[2*l+1])
{
swap(v[l],v[2*l]);
swap(ver[l],ver[2*l]);
}
if(v[2*l]>=v[2*l+1])
{
swap(v[l],v[2*l+1]);
swap(ver[l],ver[2*l+1]);
}
}
ct--;
}
if(a==3)
{
fprintf(out,"%d\n",v[1]);
}
}
}