Pagini recente » Cod sursa (job #978444) | Cod sursa (job #2051618) | Cod sursa (job #1410063) | Cod sursa (job #2051616) | Cod sursa (job #1879324)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void radix_sort(int *a, const int n){
static int frec[(1<<16) + 10] = {}, *b = new int[n];
for(int i = 0, step = 0; i < 2; ++i, step += 16){
for(int j = 0; j < n; ++j) ++frec[1 + ((a[j]>>step)&0xffff)];
for(int j = 1; j < (1<<16); ++j) frec[j] += frec[j-1];
for(int j = 0; j < n; ++j) b[frec[(a[j]>>step)&0xffff]++] = a[j];
if(i == 0) memset(frec, 0, sizeof(frec));
swap(a, b); }
delete b; }
int main(){
ifstream f("radixsort.in");
ofstream g("radixsort.out");
ll n, a, b, c;
f >> n >> a >> b >> c;
int *v = new int[n];
v[0] = b;
for(int i = 1; i < n; ++i) v[i] = (a * v[i-1] + b)%c;
radix_sort(v, n);
assert(is_sorted(v, v+n));
for(int i = 0; i < n; i += 10) g << v[i] << ' ';
return 0; }