#include #include #include #include bool descending(const int &f, const int &s) { return (f > s); } int main(void) { int n; //размер массива scanf("%d", &n); std::vector< int > oddNums; //нечетные числа std::vector< int > evenNums; //четные числа enum { isOdd, isEven }; std::vector< int > positions(n + 1); //positions[a] = четное или нечетное число в позиции a for (int i = 1; i <= n; i++) { int tmp; scanf("%d", &tmp); if (tmp & 1) { oddNums.push_back(tmp); positions[i] = isOdd; } else { evenNums.push_back(tmp); positions[i] = isEven; } } std::sort(oddNums.begin(), oddNums.end(), descending); std::sort(evenNums.begin(), evenNums.end()); for (int i = 1, j = 0, k = 0; i <= n; i++) { if (positions[i] == isOdd) { printf("%d ", oddNums[j]); j++; } else { printf("%d ", evenNums[k]); k++; } } return 0; }