#include <iostream>
#include <array>
#include <algorithm>
#include <functional>
int main()
{
std::array<int, 8> array = {{ 18 ,5 ,24 ,9 ,12 ,6 ,2, 3 }};
std::cout << "Before first partitioning: ";
for (auto const value : array)
std::cout << value << ' ';
std::cout << '\n';
// First partition putting all odd number even divisable by three first
auto second_start = std::partition(std::begin(array), std::end(array), [](int const& value) {
return (value % 2 != 0 && value % 3 == 0);
});
std::cout << "Before second partitioning: ";
for (auto const value : array)
std::cout << value << ' ';
std::cout << '\n';
auto third_start = std::partition(second_start, std::end(array), [](int const& value) {
return !(value % 2 == 0 && value % 3 == 0);
});
std::cout << "Before sorting: ";
for (auto const value : array)
std::cout << value << ' ';
std::cout << '\n';
std::sort(std::begin(array), second_start, std::less<int>());
std::sort(second_start, third_start, std::less<int>());
std::sort(third_start, std::end(array), std::greater<int>());
std::cout << "After sorting: ";
for (auto const value : array)
std::cout << value << ' ';
std::cout << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxmdW5jdGlvbmFsPgoKaW50IG1haW4oKQp7CiAgICBzdGQ6OmFycmF5PGludCwgOD4gYXJyYXkgPSB7eyAxOCAsNSAsMjQgLDkgLDEyICw2ICwyLCAzIH19OwoKICAgIHN0ZDo6Y291dCA8PCAiQmVmb3JlIGZpcnN0IHBhcnRpdGlvbmluZzogIjsKICAgIGZvciAoYXV0byBjb25zdCB2YWx1ZSA6IGFycmF5KQogICAgICAgIHN0ZDo6Y291dCA8PCB2YWx1ZSA8PCAnICc7CiAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKCiAgICAvLyBGaXJzdCBwYXJ0aXRpb24gcHV0dGluZyBhbGwgb2RkIG51bWJlciBldmVuIGRpdmlzYWJsZSBieSB0aHJlZSBmaXJzdAogICAgYXV0byBzZWNvbmRfc3RhcnQgPSBzdGQ6OnBhcnRpdGlvbihzdGQ6OmJlZ2luKGFycmF5KSwgc3RkOjplbmQoYXJyYXkpLCBbXShpbnQgY29uc3QmIHZhbHVlKSB7CiAgICAgICAgcmV0dXJuICh2YWx1ZSAlIDIgIT0gMCAmJiB2YWx1ZSAlIDMgPT0gMCk7CiAgICB9KTsKCiAgICBzdGQ6OmNvdXQgPDwgIkJlZm9yZSBzZWNvbmQgcGFydGl0aW9uaW5nOiAiOwogICAgZm9yIChhdXRvIGNvbnN0IHZhbHVlIDogYXJyYXkpCiAgICAgICAgc3RkOjpjb3V0IDw8IHZhbHVlIDw8ICcgJzsKICAgIHN0ZDo6Y291dCA8PCAnXG4nOwoKICAgIGF1dG8gdGhpcmRfc3RhcnQgPSBzdGQ6OnBhcnRpdGlvbihzZWNvbmRfc3RhcnQsIHN0ZDo6ZW5kKGFycmF5KSwgW10oaW50IGNvbnN0JiB2YWx1ZSkgewogICAgICAgIHJldHVybiAhKHZhbHVlICUgMiA9PSAwICYmIHZhbHVlICUgMyA9PSAwKTsKICAgIH0pOwoKICAgIHN0ZDo6Y291dCA8PCAiQmVmb3JlIHNvcnRpbmc6ICI7CiAgICBmb3IgKGF1dG8gY29uc3QgdmFsdWUgOiBhcnJheSkKICAgICAgICBzdGQ6OmNvdXQgPDwgdmFsdWUgPDwgJyAnOwogICAgc3RkOjpjb3V0IDw8ICdcbic7CgogICAgc3RkOjpzb3J0KHN0ZDo6YmVnaW4oYXJyYXkpLCBzZWNvbmRfc3RhcnQsIHN0ZDo6bGVzczxpbnQ+KCkpOwogICAgc3RkOjpzb3J0KHNlY29uZF9zdGFydCwgdGhpcmRfc3RhcnQsIHN0ZDo6bGVzczxpbnQ+KCkpOwogICAgc3RkOjpzb3J0KHRoaXJkX3N0YXJ0LCBzdGQ6OmVuZChhcnJheSksIHN0ZDo6Z3JlYXRlcjxpbnQ+KCkpOwoKICAgIHN0ZDo6Y291dCA8PCAiQWZ0ZXIgc29ydGluZzogIjsKICAgIGZvciAoYXV0byBjb25zdCB2YWx1ZSA6IGFycmF5KQogICAgICAgIHN0ZDo6Y291dCA8PCB2YWx1ZSA8PCAnICc7CiAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKfQo=