Pagini recente » Cod sursa (job #2809973) | Cod sursa (job #2115187) | Monitorul de evaluare | Cod sursa (job #2791996) | Cod sursa (job #1529583)
#include <fstream>
#include <vector>
using namespace std;
const int MAX_N = 10000002;
const int groupSize = 8;
int n;
int v[MAX_N];
void sortStep(const int step) {
int mask = (1 << groupSize) - 1;
vector < int > buckets[mask + 1];
for(int i = 0; i < n; ++i) {
buckets[(v[i] >> step) & mask].push_back(v[i]);
}
int k = 0;
for(int i = 0; i <= mask; ++i) {
for(vector < int > :: const_iterator j = buckets[i].begin(); j != buckets[i].end(); ++j) {
v[k++] = *j;
}
}
}
void radixSort() {
for(int step = 0; step < 32; step += groupSize) {
sortStep(step);
}
}
int main() {
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int a, b, c;
f >> n >> a >> b >> c;
v[0] = b;
for(int i = 1; i < n; ++i) {
v[i] = ((1LL * a * v[i - 1]) % c + b) % c;
}
radixSort();
for(int i = 0; i < n; i += 10) {
g << v[i] << " ";
}
g << "\n";
f.close();
g.close();
return 0;
}