Cod sursa(job #2436583)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 6 iulie 2019 13:34:59
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
#define maxn 500000

using namespace std;

ifstream fin ( "algsort.in" );
ofstream fout ( "algsort.out" );

struct nod
{
  int lson, rson, val, amt;
};

int v[maxn+5];
nod g[maxn+5];

void add_val ( int p, int x )
{
  if (g[p].val == v[x]) { g[p].amt++; return; }
  if (g[p].val < v[x])
  {
    if (g[p].rson == 0) g[p].rson = x, g[x] = {0, 0, v[x], 1};
    else add_val (g[p].rson, x);
  }
  else
  {
    if (g[p].lson == 0) g[p].lson = x, g[x] = {0, 0, v[x], 1};
    else add_val (g[p].lson, x);
  }
}

void dfs ( int x )
{
  if (g[x].lson != 0) dfs (g[x].lson);
  for (int i = 0; i < g[x].amt; i++ ) fout << g[x].val << ' ';
  if (g[x].rson != 0) dfs (g[x].rson);
}

int main ()
{
  int n; fin >> n;
  int i, j, z;
  for ( i = 1; i <= n; i++ ) fin >> v[i];
  g[1] = {0, 0, v[1], 1};
  for ( i = 2; i <= n; i++ ) add_val (1, i);
  dfs (1);
  return 0;
}