Mai intai trebuie sa te autentifici.
Cod sursa(job #1009986)
Utilizator | Data | 14 octombrie 2013 08:57:54 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 80 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.74 kb |
#include <fstream>
using namespace std;
const int N = 5e5 + 5;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
long long n, v[N], w[N], c[10], MAX = -1e9, zec = 1;
void Sort(int n) { //Sortez dupa a lg(zec) cifra
for (int i = 0; i <= 9; ++i)
c[i] = 0;
for (int i = 1; i <= n; ++i)
c[(v[i] % zec) / (zec / 10)]++;
for (int i = 1; i <= 9; ++i)
c[i] += c[i-1];
for (int i = n; i; --i) {
w[c[(v[i] % zec) / (zec / 10)]] = v[i];
c[(v[i] % zec) / (zec / 10)]--;
}
}
int main() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
MAX = max (v[i], MAX);
}
for (int i = 0; zec <= MAX; ++i) {
zec *= 10;
Sort (n);
for (int i = 1; i <= n; ++i)
v[i] = w[i];
}
for (int i = 1; i <= n; ++i)
fout << w[i] << " ";
}