Cod sursa(job #1396886)

Utilizator danalex97Dan H Alexandru danalex97 Data 23 martie 2015 09:25:33
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

ifstream F("radixsort.in");
ofstream G("radixsort.out");

const int N = 10000010;

int n;
int fr[1<<16];

int a[N],b[N];

void solve(int sift)
{
    int mask = (1<<16) - 1;
    memset(fr,0,sizeof(fr));
    for (int i=1;i<=n;++i)
        fr[ (a[i]>>sift) & mask ]++;
    for (int i=1;i<=mask;++i)
        fr[i] += fr[i-1];

    for (int i=mask;i>0;--i)
        fr[i] = fr[i-1];
    fr[0] = 0;

    for (int i=1;i<=n;++i)
        b[ ++fr[(a[i]>>sift) & mask] ] = a[i];
    for (int i=1;i<=n;++i)
        a[i] = b[i];
}

int aa,bb,cc;

int main()
{
    F>>n>>aa>>bb>>cc;
    a[1] = bb;
    for (int i=2;i<=n;++i)
        a[i] = (1LL*aa*a[i-1] + bb) % cc;
    solve(0);
    solve(16);
    for (int i=1;i<=n;i+=10)
        G<<a[i]<<' ';
    return 0;
}