Pagini recente » Cod sursa (job #1206168) | Cod sursa (job #3273574) | Cod sursa (job #716364) | Cod sursa (job #1776277) | Cod sursa (job #1393896)
#include <fstream>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
ifstream F("radixsort.in");
ofstream G("radixsort.out");
const int N = 10000010;
const int sz = 16;
const int M = 1<<sz;
int n,x,y,z,a[N],b[N];
int ct[M];
void phase1()
{
for (int i=1;i<=n;++i) ct[a[i]&(M-1)]++;
for (int i=1;i<M;++i) ct[i] += ct[i-1];
for (int i=M-1;i>0;--i) ct[i] = ct[i-1]+1; ct[0] = 1;
for (int i=1;i<=n;++i) b[ct[a[i]&(M-1)]++] = a[i];
}
void phase2()
{
for (int i=0;i<M;++i) ct[i] = 0;
for (int i=1;i<=n;++i) ct[(b[i]&((M-1)<<sz))>>sz]++;
for (int i=1;i<M;++i) ct[i] += ct[i-1];
for (int i=M-1;i>0;--i) ct[i] = ct[i-1]+1; ct[0] = 1;
for (int i=1;i<=n;++i) a[ct[(b[i]&((M-1)<<sz))>>sz]++] = b[i];
}
void mysort()
{
phase1();
//for (int i=1;i<=n;i+=10) cerr<<b[i]<<' ';
phase2();
}
int main()
{
F>>n>>x>>y>>z;
a[1] = y;
for (int i=2;i<=n;++i)
a[i] = (a[i-1] * x + y) % z;
mysort();
for (int i=1;i<=n;i+=10)
G<<a[i]<<' ';
G<<'\n';
}