Cod sursa(job #1362198)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 26 februarie 2015 10:58:07
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#define mask 255

using namespace std;

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

int n, a, mod;

int v[10000010], w[10000010];

int f[260];

int main () {

    fin >> n >> a >> v[1] >> mod ;

    for (int i = 2; i <= n; i++)
        v[i] = (1LL * a * v[i-1] + v[1]) % mod;

    for (int p = 0; p <= 24; p += 8) {

        for (int i = 0; i <= 255; i++)
            f[i] = 0;

        for (int i = 1; i <= n; i++)
            f[ (v[i] >> p) & mask ]++;

        for (int i = 1; i <= 255; i++)
            f[i] += f[i - 1];

        for (int i = n; i >= 1; i--) {
            int cur = ((v[i] >> p) & mask);

            w[ f[cur] ] = v[i];
            f[cur]--;
        }

        for (int i = 1; i <= n; i++)
            v[i] = w[i];

    }

    for (int i = 1; i <= n; i += 10)
        fout << v[i] << " ";

    return 0;
}