Pagini recente » Cod sursa (job #41667) | Cod sursa (job #4763) | Cod sursa (job #3132287) | Cod sursa (job #2069802) | Cod sursa (job #971326)
Cod sursa(job #971326)
#include <algorithm>
#include <cstdio>
#include <vector>
using namespace std;
const int NMax = 500100;
const int oo = 0x3f3f3f3f;
int N;
void readVector(vector<int> &, int);
void sortVector(vector<int> &, int, int);
void writeVector(vector<int> &, int);
template <const int _size_>
struct VIM: vector<int> { // Vector IMproved :)
//------------------------------------------------------------------------------------
vector<int> norm;
VIM() {
(*this).clear();
norm.resize(_size_, 0);
}
//------------------------------------------------------------------------------------
void readVector(int length) {
(*this).resize(length + 8, 0);
for (int i = 1; i <= length; i++) {
scanf("%i", &(*this).at(i));
}
}
//------------------------------------------------------------------------------------
void sortVector(int left, int right) {
if (left == right)
return ;
int middle = left + (right - left) / 2;
sortVector(left, middle);
sortVector(middle + 1, right);
int p1 = left, p2 = middle + 1;
norm.at(0) = 0;
while (p1 <= middle || p2 <= right) {
int value1, value2;
if (p1 <= middle)
value1 = (*this).at(p1);
else value1 = oo;
if (p2 <= right)
value2 = (*this).at(p2);
else value2 = oo;
if (value1 < value2) {
norm.at(++norm.at(0)) = value1; p1++;
} else {
norm.at(++norm.at(0)) = value2; p2++;
}
}
for (int i = left; i <= right; i++)
(*this).at(i) = norm.at(i - left + 1);
}
//------------------------------------------------------------------------------------
void writeVector(int length) {
for (size_t i = 1; i <= length; i++)
printf("%i ", (*this).at(i));
}
//------------------------------------------------------------------------------------
};
VIM<NMax> A;
int main() {
#ifdef INFOARENA
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
#endif
scanf("%i", &N);
A.readVector(N);
A.sortVector(1, N);
A.writeVector(N);
}