Cod sursa(job #1332012)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 1 februarie 2015 15:35:06
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <cstring>

#define Nmax 10000100

using namespace std;

int N, A, B, C, V[Nmax];

void QuickSort(int A, int B) {

    int left, right, middleValue;

    left = A;
    right = B;
    middleValue = V[left + (right - left)/ 2];

    while(left <= right) {

        while(V[left] < middleValue)
            left++;

        while(middleValue < V[right])
            right--;

        if(left <= right) {
            swap(V[left], V[right]);
            left++;
            right--;
        }
    }

    if(A < right)
        QuickSort(A, right);
    if(left < B)
        QuickSort(left, B);
}
void Solve() {

    V[1] = B;

    for(int i = 2; i <= N; i++)
        V[i] = (A * V[i - 1] + B) % C;

    QuickSort(1, N);

}
void Read() {

    ifstream in("radixsort.in");
    in >> N >> A >> B >> C;
    in.close();
}
void Write() {

    ofstream out("radixsort.out");

    for(int i = 1; i <= N; i += 10)
        out << V[i] << ' ';
    out << '\n';

    out.close();

}
int main() {

    Read();
    Solve();
    Write();

    return 0;

}