Cod sursa(job #1879324)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 14 februarie 2017 20:52:26
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#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; }