Pagini recente » Cod sursa (job #674033) | Cod sursa (job #725775) | Cod sursa (job #2630334) | Cod sursa (job #1218426) | Cod sursa (job #1396886)
#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;
}