Pagini recente » Cod sursa (job #2924460) | Cod sursa (job #2347236) | Cod sursa (job #627446) | Cod sursa (job #2522275) | Cod sursa (job #1193322)
#include <cstdio>
#include <cstring>
using namespace std;
#define mainMask 8
#define NMAX 10000005
#define LL long long
LL N,A,C,i;
LL HA[1<<mainMask];
LL H[NMAX],V[NMAX];
void Solve(LL P)
{
memset(HA,0,sizeof(HA));
memset(H,0,sizeof(H));
LL mask=(1<<mainMask)-1;
LL i;
for (i=1;i<=N;++i)
++HA[ ( V[i] & ( mask<<P ) ) >>P ];
for (i=1;i<=mask;++i)
HA[i]+=HA[i-1];
for (i=mask;i>=1;--i)
HA[i]=HA[i-1];
for (i=1 , HA[0]=0;i<=N;++i)
H[ ++HA [ ( V[i] & ( mask<<P ) ) >>P ] ] =V[i];
for (i=1;i<=N;++i)
V[i]=H[i];
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d%d%d%d",&N,&A,&V[1],&C);
for (i=2;i<=N;++i)
V[i]=(A*V[i-1]+V[1])%C;
for (i=0;i<32;i+=mainMask)
Solve(i);
for (i=1;i<=N;i+=10) printf("%d ",V[i]);
printf("\n");
return 0;
}