Pagini recente » Cod sursa (job #1257754) | Cod sursa (job #3223571) | Cod sursa (job #1212541) | Cod sursa (job #1963348) | Cod sursa (job #2611238)
#include <bits/stdc++.h>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
const int MAX = 10000001;
const int NB = 11;
const int B = 1 << NB;
int nr[B], poz[B], v[2][MAX];
int a, b, c, n, vmax, nc, cif, k;
int main()
{
in >> n >> a >> b >> c;
v[0][0] = vmax = b;
for(int i = 1; i < n; i++)
{
v[0][i] = (1LL * a * v[0][i - 1] + 1LL * b) % c;
vmax = max(vmax, v[0][i]);
}
nc = 0;
while(vmax)
{
nc++;
vmax /= B;
}
int p = 0;
for(int k = 0; k < nc; k++)
{
for(int j = 0; j < B; j++)
{
nr[j] = 0;
}
for(int i = 0; i < n; i++)
{
int cif = (v[k % 2][i] >> p) & (B - 1);
nr[cif]++;
}
poz[0] = 0;
for(int j = 1; j < B; j++)
{
poz[j] = poz[j - 1] + nr[j - 1];
}
for(int i = 0; i < n; i++)
{
cif = (v[k % 2][i] >> p) & (B - 1);
v[1 - k % 2][poz[cif]++] = v[k % 2][i];
}
p += NB;
}
for(int i = 0; i < n; i += 10)
{
out << v[nc % 2][i] << " ";
}
return 0;
}