Pagini recente » Cod sursa (job #3331689) | Cod sursa (job #974755) | Cod sursa (job #3271063) | Cod sursa (job #727822) | Cod sursa (job #3327707)
//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;
}