Cod sursa(job #2312590)

Utilizator miruna1224Floroiu Miruna miruna1224 Data 5 ianuarie 2019 02:53:16
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <climits>

#define f for(i = 1; i <= n ; i++)
#define primul_el out << v[AI[1]] <<" ";

using namespace std;

const int N = 1000005;

int AI[N], *v, n;

void Create (int x, int st, int dr)
{
    if(st == dr)
    {
        AI[x] = st;
        return;
    }

    int m = ( st + dr ) / 2;

    Create(2 * x, st, m);
    Create(2 * x + 1, m + 1, dr);

    if(v[AI[2 * x]] > v[AI[2 * x + 1]])
        AI[x] = AI[2 * x + 1];
    else
        AI[x] = AI[2 * x ];
}

void Update ( int st, int dr, int x, int poz )
{
    unsigned int m = (st + dr) / 2;
    if(st == dr)
    {
        AI[x] = poz;
        return;
    }
    if(poz <= m)
        Update( st, m, 2 * x, poz);
    else
        Update( m + 1, dr, 2 * x + 1, poz);

    if(v[AI[2 * x]] < v[AI[2 * x + 1]])
        AI[x] = AI[2 * x];
    else
        AI[x] = AI[2 * x + 1];

}

int main()
{
    int i;

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

    in >> n;
    v = new int[n + 1];
    f in >> v[i];

    Create ( 1, 1, n );

    f {
        primul_el
        v[AI[1]] = INT_MAX;
        Update(1, n, 1, AI[1]);
    }

    in.close();
    out.close();

    return 0;
}