Pagini recente » Cod sursa (job #2984184) | Cod sursa (job #2410108) | Cod sursa (job #160419) | Cod sursa (job #2083866) | Cod sursa (job #2618249)
#include <iostream>
#include <fstream>
#include <vector>
const int MAX_BUCKET = (1<<16) + 2;
const int MAXN = 10000000 + 1;
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
vector<int>bucket[MAX_BUCKET];
int n,a,b,c,v[MAXN];
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;
if(v[i] == 93)
cout<<"DA";
}
for(int i = 1; i <= n; i++){
int u16 = v[i] & ((1<<16) - 1);
bucket[u16].emplace_back(v[i]);
}
int index = 0;
for(int i = 0; i <= (1<<16); i++){
for(int j = 0; j < bucket[i].size(); j++){
int nr = bucket[i][j];
v[++index] = nr;
}
bucket[i].clear();
}
for(int i = 1; i <= n; i++){
int primii16 = (1<<16) - 1;
int p16 = (v[i] & (primii16<<15));
if(p16 > 0)
p16 >>= 16;
bucket[p16].emplace_back(v[i]);
}
index = 0;
for(int i = 0; i <= (1<<16); i++){
for(int j = 0; j < bucket[i].size(); j++){
int nr = bucket[i][j];
v[++index] = nr;
}
}
for(int i = 1; i <= n; i += 10)
out<<v[i]<<" ";
return 0;
}