Pagini recente » Cod sursa (job #2246353) | Cod sursa (job #2839796) | Cod sursa (job #371845) | Cod sursa (job #894329) | Cod sursa (job #2343447)
#pragma GCC optimize("03")
#include <bits/stdc++.h>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
int n;
int a, b, c, v[10000100], tp, idx[256], counter[256], aux[10000010];
vector <int> w[256];
int main() {
in >> n >> a >> b >> c;
v[1] = b;
for (int i = 2; i <= n; i++)
v[i] = (1LL * a * v[i - 1] + b) % c;
for (int os = 0; os < 4; os++) {
memset(counter, 0, sizeof counter);
for (int i = 1; i <= n; i++)
counter[(v[i] >> (8 * os)) & 255]++;
idx[0] = 0;
for (int i = 1; i < 256; i++)
idx[i] = idx[i - 1] + counter[i - 1];
int i = 1;
while (i + 3 <= n) {
aux[++idx[(v[i] >> (8 * os)) & 255]] = v[i];
aux[++idx[(v[i + 1] >> (8 * os)) & 255]] = v[i + 1];
aux[++idx[(v[i + 2] >> (8 * os)) & 255]] = v[i + 2];
aux[++idx[(v[i + 3] >> (8 * os)) & 255]] = v[i + 3];
i += 4;
}
if (i <= n)
aux[++idx[(v[i] >> (8 * os)) & 255]] = v[i];
if (i + 1 <= n)
aux[++idx[(v[i + 1] >> (8 * os)) & 255]] = v[i + 1];
if (i + 2 <= n)
aux[++idx[(v[i + 2] >> (8 * os)) & 255]] = v[i + 2];
memcpy(v, aux, sizeof(v));
}
for (int i = 1; i <= n; i += 10)
out << v[i] << ' ';
return 0;
}