Cod sursa(job #3327707)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 4 decembrie 2025 20:18:30
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
//https://www.infoarena.ro/problema/algsort

//#pragma GCC optimize("O3")   
//#pragma GCC optimize("Ofast") 
//#pragma GCC optimize("fast-math") 
//#pragma GCC optimize("unroll-loops") 
//#pragma GCC optimize("inline")  
//#define _USE_MATH_DEFINES
//#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <fstream>
//#include <cstdlib>
#include <vector>
//#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <stack>
//#include <utility>
#include <algorithm>
//#include <string>
//#include <map>
//#include <unordered_map>
//#include <set>
//#include <unordered_set>
//#include <cstdint>
//#include <climits>
//#include <iomanip>
//#include <cstdio>
//#include <tuple>

using namespace std;

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

const int NRMAX = 500000;
constexpr int NRB = (1 << 16);

int v[NRMAX], rez[NRMAX];
int fr[NRB], it[NRB];

int main()
{
    int n, i, j, ptr = 0;

    fin >> n;
    for (i = 0; i < n; ++i)
        fin >> v[i];

    for (i = 0; i < n; ++i)
        ++fr[(v[i] >> 15)];

    for (i = 1; i < NRB; ++i)
        it[i] = it[i - 1] + fr[i - 1];

    for (i = 0; i < n; ++i)
    {
        int nr = (v[i] >> 15);
        rez[it[nr]] = v[i];
        ++it[nr];
    }

    sort(rez, rez + fr[0]);
    for (i = 1; i < NRB; ++i)
    {
        fr[i] += fr[i - 1];
        sort(rez + fr[i - 1], rez + fr[i]);
    }

    for (i = 0; i < n; ++i)
        fout << rez[i] << " ";

    return 0;
}