Pagini recente » Cod sursa (job #1736720) | Monitorul de evaluare | Istoria paginii utilizator/corinatud | Statistici Apostol Vlad (Vlad135) | Cod sursa (job #1959843)
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#define BucketSize 16
#define MaxN 10000005
using namespace std;
FILE*IN,*OUT;
int N,Bucket[1<<BucketSize];
int B,A,C,v[MaxN],aux[MaxN];
void Radix(int *a,int Start,int End)
{
for(int p=0;p<32;p+=BucketSize)
{
memset(Bucket,0,sizeof Bucket);
for(int i=Start;i<=End;i++)
Bucket[(a[i]>>p)&((1<<BucketSize)-1)]++;
for(int i=1;i<1<<BucketSize;i++)
Bucket[i]+=Bucket[i-1];
for(int i=End;i>=Start;i--)
aux[Bucket[(a[i]>>p)&((1<<BucketSize)-1)]--]=a[i];
memcpy(v,aux,sizeof aux);
}
}
int main()
{
IN=fopen("radixsort.in","r");
OUT=fopen("radixsort.out","w");
fscanf(IN,"%d%d%d%d",&N,&A,&B,&C);
v[1]=B%C;
for(int i=1;i<=N;i++)
v[i]=((long long)A*v[i-1]+B)%C;
Radix(v,1,N);
for(int i=1;i<=N;i+=10)
fprintf(OUT,"%d ",v[i]);
return 0;
}