Cod sursa(job #1502310)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 14 octombrie 2015 16:08:06
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#define N 10000005

using namespace std;
int n,a,b,c,k,nx[N],u[66000],p[66000],i,j,v[N],vv[N],nr,NR;
int main()
{
     freopen("radixsort.in","r",stdin);
     freopen("radixsort.out","w",stdout);

    scanf("%d%d%d%d",&n,&a,&b,&c);

     v[0]=b;
     for(i=1;i<n;++i) v[i]=(1LL*v[i-1]*a+b)%c;

     for(NR=0;NR<2;++NR)
     {
          for(i=0;i<(1<<16);++i) p[i]=-1;

          for(i=0;i<n;++i)
          {
              k=(v[i]>>(16*NR))%(1<<16);
              if(p[k]==-1) p[k]=i, u[k]=i;
              else nx[u[k]]=i, u[k]=i;
          }
          nr=-1;
          for(i=0;i<(1<<16);++i)
          if(p[i]!=-1)
          {
              for(j=p[i];u[i]!=j;j=nx[j])
              vv[++nr]=v[j];
              vv[++nr]=v[u[i]];
          }
          for(i=0;i<n;++i) v[i]=vv[i];
     }
     for(i=0;i<n;i+=10) printf("%d ",v[i]);
     printf("\n");
     return 0;
}