Pagini recente » Cod sursa (job #1009044) | Cod sursa (job #1894600) | Monitorul de evaluare | Cod sursa (job #830866) | Cod sursa (job #1557794)
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
unsigned ve[10000005],v2[10000005],p2[35];
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
long long int a,b,c,d;
int i,n,st,dr,l,j;
dr=n;
cin>>n>>a>>b>>c;
ve[1]=b;
d=0;
for(i=2;i<=n;i++)
{
if(d>c)
d=(d*a+b)%c;
ve[i]=d;
}
p2[0]=1;
for(i=1;i<=30;i++)
p2[i]=p2[i-1]*2;
l=1;
for(i=0;i<=30;i++)
{
st=dr=l;
for(j=l;j<=n;j++)
if(ve[j]<p2[i])
{
v2[st]=ve[j];
st++;
}
dr=st;
for(j=l;j<=n;j++)
if((ve[j]>=p2[i]) && !(ve[j] & p2[i]))
{
v2[dr]=ve[j];
dr++;
}
for(j=l;j<=n;j++)
{
if((ve[j]>=p2[i]) && (ve[j] & p2[i]))
{
v2[dr]=ve[j];
dr++;
}
ve[j]=v2[j];
}
l=st;
}
// for(i=1;i<=n;i=i+10)
// printf("%u ",ve[i]);
return 0;
}