Pagini recente » Cod sursa (job #1531730) | Cod sursa (job #691887) | Cod sursa (job #180532) | Cod sursa (job #11484) | Cod sursa (job #1375843)
#include <cstring>
#include <fstream>
#include <algorithm>
using namespace std;
int N, A, B, C;
int V[10000002], W[1 << 16], S[1 << 16];
int aux[10000002];
void radix(int x, int y)
{
int mask = 0;
for (int i = x; i < y; ++i)
mask ^= (1 << i);
memset(W, 0, sizeof(W));
for (int i = 1; i <= N; ++i)
++W[V[i] & mask];
for (int i = 0; i < (1 << 16); ++i)
S[i] = (i == 0 ? 0 : S[i - 1]) + W[i];
for (int i = N; i >= 1; --i)
{
aux[S[(V[i] & mask) - 1] + W[V[i] & mask]] = V[i];
--W[V[i] & mask];
}
memcpy(V, aux, sizeof(V));
}
int main()
{
ifstream fin("radixsort.in");
ofstream fout("radixsort.out");
fin >> N >> A >> B >> C;
V[1] = B;
for (int i = 2; i <= N; ++i)
V[i] = (1LL * A * V[i - 1] + B) % C;
radix(0, 15);
radix(16, 30);
for (int i = 1; i <= N; i += 10)
fout << V[i] << ' ';
fout << '\n';
fin.close();
fout.close();
}