Mai intai trebuie sa te autentifici.
Cod sursa(job #3133029)
Utilizator | Data | 24 mai 2023 21:39:07 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 80 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.1 kb |
#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];
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 i = s - 1, j;
for(j = s; j < d; ++j) {
if(v[j] < pivot) {
++i; std::swap(v[i], v[j]);
}
}
std::swap(v[i + 1], v[d]);
return i + 1;
}
static inline void sort(const std::size_t& s, const std::size_t& d) {
if(s >= d) return;
const std::size_t pz = s + (rand() % (d - s));
std::swap(v[pz], v[d]);
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;
}