Pagini recente » Cod sursa (job #2663682) | Borderou de evaluare (job #156779) | Cod sursa (job #2737002) | Cod sursa (job #776298) | Cod sursa (job #3133023)
#pragma GCC optimize("O2")
#include <iostream>
#include <fstream>
#include <cstring>
std::ifstream in(static_cast<const char*>("algsort.in"));
std::ofstream out(static_cast<const char*>("algsort.out"));
constexpr std::size_t nmax = 500005;
std::size_t n, v[nmax], t[nmax];
static inline std::size_t partition(const std::size_t& s, const std::size_t& d) {
const std::size_t& pivot = v[d];
std::size_t k = 0, p = d;
for(std::size_t i = s; i < d; ++i) {
if(v[i] < pivot) t[++k] = v[i];
}
t[++k] = pivot; p = s + k - 1;
for(std::size_t i = s; i < d; ++i) {
if(v[i] >= pivot) t[++k] = v[i];
}
std::memcpy(static_cast<void*>(v + s), static_cast<void*>(t + 1), k * sizeof(std::size_t));
return p;
}
static inline void sort(const std::size_t& s, const std::size_t& d) {
if(s >= d) return;
const std::size_t p = partition(s, d);
sort(s, p - 1);
sort(p + 1, d);
}
int main(void) {
std::ios::sync_with_stdio(false);
in.tie(nullptr);
out.tie(nullptr);
in >> n;
for(std::size_t i = 1; i <= n; ++i) in >> v[i];
sort(1, n);
for(std::size_t i = 1; i <= n; ++i) out << v[i] << ' ';
in.close();
out.close();
return 0;
}