Pagini recente » Cod sursa (job #1432682) | qqlow | Cod sursa (job #2351319) | Cod sursa (job #1286283) | Cod sursa (job #1811517)
#include <bits/stdc++.h>
using namespace std;
const int dim = 8;
const int nmax = 1e7 + 10;
int n;
int v[nmax], aux[nmax];
void input() {
int a, b, c;
scanf("%d %d %d %d", &n, &a, &b, &c);
v[1] = b;
for (int i = 2; i <= n; ++i)
v[i] = (1LL * a * v[i-1] + b) % c;
}
void sort_bucket(int p) {
int nr[1<<dim];
for (int i = 0; i < (1 << dim); ++i) nr[i] = 0;
p = dim * p;
int mask = (1 << dim) - 1;
for (int i = 1; i <= n; ++i)
nr[(v[i]>>p)&mask]++;
for (int i = 1; i <= mask; ++i)
nr[i] += nr[i-1];
for (int i = n; i ; --i)
aux[nr[(v[i]>>p)&mask]--] = v[i];
for (int i = 1; i <= n; ++i)
v[i] = aux[i];
}
void solve() {
for (int i = 0; i < 32 / dim; ++i)
sort_bucket(i);
}
void output() {
for (int i = 1; i <= n; i += 10)
printf("%d ", v[i]);
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
input();
solve();
output();
return 0;
}