Cod sursa(job #1969331)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 18 aprilie 2017 13:39:18
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 1e7 + 5;
int A, B, C, n, s, ss, i, j, a[Nmax], b[Nmax], bucket[260];

int main()
{
    freopen("radixsort.in", "r", stdin);
    freopen("radixsort.out", "w", stdout);

    scanf("%d%d%d%d", &n, &A, &B, &C);
    a[1] = B;
    for(i=1; i<=n; ++i) a[i] = (1LL * A * a[i-1] + B) % C;

    for(j=0; j<32; j+=8)
    {
        for(j=0; j<256; ++j) bucket[j] = 0;
        for(i=1; i<=n; ++i) ++bucket[(a[i]>>j) & 255];

        s = 0;
        for(j=0; j<256; ++j)
        {
            ss = s;
            s += bucket[j];
            bucket[j] = ss;
        }

        for(i=1; i<=n; ++i)
            b[ ++bucket[(a[i]>>j) & 255] ] = a[i];

        for(i=1; i<=n; ++i) a[i] = b[i];
    }

    for(i=1; i<=n; i+=10) printf("%d ", a[i]);

    return 0;
}