Pagini recente » Cod sursa (job #156520) | Cod sursa (job #290714) | Cod sursa (job #406670) | Cod sursa (job #2012509) | Cod sursa (job #1028043)
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f=fopen("heapuri.in","r");
FILE *g=fopen("heapuri.out","w");
int k,nr,i,v[200001],n,w[200001],poz,q[200001];
void combheap(int i,int n);
void up(int fiu);
int extrage();
int main()
{
fscanf(f,"%d",&n);
k=0;
for(i=1;i<=n;i++)
{
fscanf(f,"%d",&nr);
if(nr==1)
{
fscanf(f,"%d",&v[++k]);
w[k]=k;
q[k]=k;
up(w[k]);
}
if(nr==3) fprintf(g,"%d\n",v[1]);
if(nr==2)
{
fscanf(f,"%d",&poz);
v[q[poz]]=1000000001;
combheap(q[poz],k);
}
}
fclose(g);
return 0;
}
void combheap(int i,int n)
{
int a=v[i],tata=i,fiu=2*i;
while(fiu<=n)
{
if(fiu<n)
if(v[fiu]>v[fiu+1])fiu++;
if(a>v[fiu])
{
swap(v[fiu],v[tata]);
swap(w[tata],w[fiu]);
q[w[tata]]=tata;
q[w[fiu]]=fiu;
tata=fiu;
fiu=2*fiu;
} else fiu=n+1;
}
v[tata]=a;
}
void up(int fiu)
{
int a=v[fiu],tata=fiu/2;
while (tata>=1)
{
if(v[tata]>v[fiu])
{
swap(v[fiu],v[tata]);
swap(w[tata],w[fiu]);
q[w[tata]]=tata;
q[w[fiu]]=fiu;
// q[w[fiu]]=w[fiu];
//q[w[tata]]=w[tata];
fiu=tata;
tata=fiu/2;
} else tata=0;
}
}