Pagini recente » Cod sursa (job #3231397) | Cod sursa (job #2501101) | Cod sursa (job #530572) | Cod sursa (job #2653922) | Cod sursa (job #2618369)
#include <iostream>
#include <fstream>
#include <vector>
const int MAX_BUCKET = (1<<16) + 1,MAXN = 10000003;
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
int n,a,b,c;
int fr[MAX_BUCKET],v[MAXN],ans[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;
}
int lim = (1<<16) - 1;
for(int i = 1; i <= n; i++){
int u8 = v[i] & lim;
fr[u8]++;
if(u8 == 93)
cout<<"DA Este"<<" "<<v[i]<<endl;
}
for(int i = 1; i <= MAX_BUCKET - 1; i++)
fr[i] += fr[i - 1];
for(int i = n; i >= 1; i--){
int u8 = v[i] & lim;
ans[fr[u8]] = v[i];
fr[u8]--;
}
for(int i = 0; i < MAX_BUCKET; i++)
fr[i] = 0;
for(int i = 1; i <= n; i++)
v[i] = ans[i];
for(int i = 1; i <= n; i++){
int u8 = (v[i] >> 16) & lim;
fr[u8]++;
}
for(int i = 1; i <= MAX_BUCKET - 1; i++)
fr[i] += fr[i - 1];
for(int i = n; i >= 1; i--){
int u8 = (v[i] >> 16) & lim;
ans[fr[u8]] = v[i];
fr[u8]--;
}
for(int i = 1; i <= n; i++)
v[i] = ans[i];
for(int i = 1; i <= n; i += 10)
out<<v[i]<<" ";
return 0;
}