#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
int pivot = 8;
int arr [9] = {2,1,5,8,9,4,10,15,20};
// get partition point
int *pt = std::stable_partition(arr, std::end(arr), [&](int n) {return n < pivot;});
// create two vectors consisting of left and right hand side
// of partition
std::vector<int> a1(arr, pt);
std::vector<int> a2(pt, std::end(arr));
// output results
for (auto& i : a1)
std::cout << i << " ";
std::cout << '\n';
for (auto& i : a2)
std::cout << i << " ";
}
ICAgICNpbmNsdWRlIDxhbGdvcml0aG0+CiAgICAjaW5jbHVkZSA8aW9zdHJlYW0+CiAgICAjaW5jbHVkZSA8dmVjdG9yPgoKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBpbnQgcGl2b3QgPSA4OwogICAgICAgIGludCBhcnIgWzldID0gezIsMSw1LDgsOSw0LDEwLDE1LDIwfTsKCiAgICAgICAgLy8gZ2V0IHBhcnRpdGlvbiBwb2ludCAgCiAgICAgICAgaW50ICpwdCA9IHN0ZDo6c3RhYmxlX3BhcnRpdGlvbihhcnIsIHN0ZDo6ZW5kKGFyciksIFsmXShpbnQgbikge3JldHVybiBuIDwgcGl2b3Q7fSk7CgogICAgICAgIC8vIGNyZWF0ZSB0d28gdmVjdG9ycyBjb25zaXN0aW5nIG9mIGxlZnQgYW5kIHJpZ2h0IGhhbmQgc2lkZQogICAgICAgIC8vIG9mIHBhcnRpdGlvbgogICAgICAgIHN0ZDo6dmVjdG9yPGludD4gYTEoYXJyLCBwdCk7CiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBhMihwdCwgc3RkOjplbmQoYXJyKSk7CgogICAgICAgIC8vIG91dHB1dCByZXN1bHRzCiAgICAgICAgZm9yIChhdXRvJiBpIDogYTEpCiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBpIDw8ICIgIjsKICAgICAgICBzdGQ6OmNvdXQgPDwgJ1xuJzsKICAgICAgICBmb3IgKGF1dG8mIGkgOiBhMikKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IGkgPDwgIiAiOwogICAgfQ==