Cod sursa(job #830830)

Utilizator chimistuFMI Stirb Andrei chimistu Data 7 decembrie 2012 19:14:54
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>
#define maxn 1500000
#define infinit 2147483647

long long a[500000],arb[maxn],poz,nod,val;

FILE*f=fopen("algsort.in","r");
FILE*g=fopen("algsort.out","w");

int min(int a,int b)
{
	if (a<b)
		return a;
	return b;
}

void creare(int nod, int st, int dr)
{
	int mij;
	if (st==dr)
	{
		arb[nod]=a[st];
		return;}
	else
	{
		mij=(st+dr)/2;
		creare(nod*2,st,mij);
		creare(nod*2+1,mij+1,dr);}
	arb[nod]=min(arb[nod*2],arb[nod*2+1]);
}

void update(int nod, int st, int dr)
{
	int mij;
	if (st==dr)
	{
		arb[nod]=infinit;
		return;}
	else
	{
		mij=(st+dr)/2;
		if (arb[2*nod]<=arb[nod])
			update(2*nod,st,mij);
		else
			update(2*nod+1,mij+1,dr);
	}
	arb[nod]=min(arb[2*nod],arb[2*nod+1]);
}
int main()
{
    int n,i;
	fscanf(f,"%d",&n);
	for (i=1;i<=n;i++)
		fscanf(f,"%d",&a[i]);
	creare(1,1,n);
	while (arb[1]!=infinit)
	{
		fprintf(g,"%d ",arb[1]);
		update(1,1,n);}
	return 0;
}