Pagini recente » Cod sursa (job #2468214) | Cod sursa (job #2447430) | Cod sursa (job #2518269) | Cod sursa (job #1101453) | Cod sursa (job #2910753)
// This program was written by Mircea Rebengiuc
// on 21.06.2022
// for problem radixsort
#include <stdio.h>
#include <ctype.h>
#define MAXN 10000000
#define NBUCKET 256
#define LBUCKET 8
#define NBITS 31
#define byte unsigned char
// daca nu iau MLE e miracol
int v[MAXN]; // ~40MB
int index[2][MAXN]; // ~80MB
int freq[NBUCKET];
FILE *fin, *fout;
int main(){
fin = fopen( "radixsort.in", "r" );
fout = fopen( "radixsort.out", "w" );
int a, c;
int n, i, j, x, t;
fscanf( fin, "%d%d%d%d", &n, &a, v, &c );
for( i = 1 ; i < n ; i++ )
v[i] = (((long long)a) * v[i - 1] + v[0]) % c;
t = 0;
for( i = 0 ; i < n ; i++ )
index[t][i] = i;
for( x = 0 ; x < NBITS ; x += LBUCKET ){
for( i = 0 ; i < NBUCKET ; i++ )
freq[i] = 0;
for( i = 0 ; i < n ; i++ )
freq[(v[i] >> x) & (NBUCKET - 1)]++;
if( freq[0] < n ){
for( i = 1 ; i < NBUCKET ; i++ )
freq[i] += freq[i - 1];
for( i = NBUCKET - 1 ; i ; i-- )
freq[i] = freq[i - 1];
freq[0] = 0;
for( i = 0 ; i < n ; i++ ){
j = index[t][i];
index[t ^ 1][freq[(v[j] >> x) & (NBUCKET - 1)]++] = j;
}
t ^= 1;
}
}
for( i = 0 ; i < n ; i += 10 )
fprintf( fout, "%d ", v[index[t][i]] );
fputc( '\n', fout );
fclose( fin );
fclose( fout );
return 0;
}