Cod sursa(job #979971)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 3 august 2013 17:05:23
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

#define LeftSon(i) 2*i
#define RightSon(i) 2*i+1

#define Nmax 500005

struct nod
{
    int val;
    int nr;

} BST[2*Nmax];

int N;

ifstream f("algsort.in");
ofstream g("algsort.out");

void inserare( int nod, int key )
{
    if ( BST[nod].val == key || BST[nod].nr == 0 )
            BST[nod].val = key,
            BST[nod].nr++;
    else
        if ( BST[nod].val > key )
                inserare(LeftSon(nod),key);
        else
                inserare(RightSon(nod),key);
}

void print( int nod )
{
    if ( BST[nod].nr > 0 )
    {
        print(LeftSon(nod));

        while(BST[nod].nr > 0)
        {
            g << BST[nod].val << " ";
            BST[nod].nr--;
        }

        print(RightSon(nod));
    }
}

int v[Nmax];

int main()
{
    int n, a;

    f >> n;
    for ( int i = 1; i <= n; i++ )
            f >> v[i];

    random_shuffle( v + 1, v + n + 1 );

    for ( int i = 1; i <= n; i++ )
            inserare(1,v[i]);

    print(1);

    return 0;
}