Pagini recente » Cod sursa (job #382931) | Cod sursa (job #3273590) | Cod sursa (job #2671699) | Cod sursa (job #2527732) | Cod sursa (job #1023216)
#include <iostream>
#include <stdio.h>
FILE *f=fopen("heap.in","r");
FILE *g=fopen("heap.out","w");
using namespace std;
int n,i,v[500001];
int extrag();
void afisare();
void combheap(int i,int n);
int main()
{
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
for(i=n/2;i>=1;i--)
combheap(i,n);
int cn=n;
for(i=1;i<=cn;i++)
fprintf(g,"%d ",extrag());
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])
{
v[tata]=v[fiu];
tata=fiu;
fiu=2*fiu;
} else fiu=n+1;
}
v[tata]=a;
}
int extrag()
{
int a=v[1];
v[1]=v[n];n--;
combheap(1,n);
return a;
}
void afisare()
{
for(int i=1;i<=n;i++)
fprintf(g,"%d ",v[i]);
fprintf(g,"\n");
}