Cod sursa(job #2671077)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 11 noiembrie 2020 14:00:26
Problema Radix Sort Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

const int max_n = (int)1e7 + 5;
const int mask = (int)(1 << 8) - 1;
const int bytes = 8;
const int times = 4;

int n;

int a, b, c;

int v[max_n];

int counter[mask + mask], tmp[max_n];

int main() {
  ifstream in("radixsort.in");
  ofstream out("radixsort.out");
  in >> n >> a >> b >> c;
  v[1] = b;
  for (int i = 2; i <= n; ++i) {
    v[i] = (1LL * a * v[i - 1] + b) % c;
  }
  for (int t = 0; t < times; ++t) {
    for (int i = 1; i <= n; ++i) {
      counter[((v[i] << (t * bytes)) & mask)] += 1;
    }
    for (int i = 1; i <= mask; ++i) {
      counter[i] += counter[i - 1];
    }
    for (int i = 1; i <= n; ++i) {
      tmp[counter[((v[i] << (t * bytes)) & mask)]] = v[i];
      counter[((v[i] << (t * bytes)) & mask)] -= 1;
    }
    for (int i = 1; i <= n; ++i) {
      v[i] = tmp[i];
    }
    memset(counter, 0, sizeof(counter));
  }
  reverse(v + 1, v + n + 1);
  for (int i = 1; i <= n; i += 10) {
    out << v[i] << " ";
  }
  return 0;
}