Pagini recente » Istoria paginii utilizator/mihaitacornestean | Cod sursa (job #1926880) | Cod sursa (job #1003622) | Cod sursa (job #1104364) | Cod sursa (job #1250128)
#include <iostream>
#include <fstream>
using namespace std;
#define Nmax 10000005
#define BASE 65535
ifstream f ("radixsort.in");
ofstream g ("radixsort.out");
int n, a, b, c;
int m[Nmax], aux[Nmax], bucket[BASE + 1];
int main(){
f >> n >> a >> b >> c;
m[1] = b;
for (int i = 2; i <= n; ++i)
m[i] = (1LL * a * m[i - 1] + b) % c;
int p = 1;
for (int i = 1; BASE >> i; ++i)
++p;
for (int i = 0; i < 32; i += p){
for (int j = 0; j <= BASE; ++j)
bucket[j] = 0;
for (int j = 1; j <= n; ++j)
++bucket[(m[j] >> i) & BASE];
for (int j = 1; j <= BASE; ++j)
bucket[j] += bucket[j - 1];
for (int j = n; j > 0; --j)
aux[bucket[(m[j] >> i) & BASE]--] = m[j];
for (int j = 1; j <= n; ++j)
m[j] = aux[j];
}
for (int i = 1; i <= n; i += 10)
g << m[i] << " ";
g << "\n";
return 0;
}