#include <iostream>
#include <algorithm>
#include <vector>
struct cmp_subset
{
std::vector<int> vorder;
cmp_subset(const std::vector<int>& order)
{
vorder.resize(order.size());
for (int i=0; i<order.size(); ++i)
vorder.at(order[i]) = i;
}
bool operator()(int lhs, int rhs) const
{
return vorder[lhs] < vorder[rhs];
}
};
int main()
{
std::vector<int> order = {5, 0, 4, 3, 2, 1, 7, 6};
std::vector<int> subset = {0, 1, 2, 5};
for (auto x : subset)
std::cout << x << ' ';
std::cout << '\n';
std::sort(subset.begin(), subset.end(), cmp_subset(order));
for (auto x : subset)
std::cout << x << ' ';
std::cout << '\n';
return 0;
}
////////////////////////////////////////////////////////////////////////////////
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKc3RydWN0IGNtcF9zdWJzZXQKewogICAgc3RkOjp2ZWN0b3I8aW50PiB2b3JkZXI7CiAgICAKICAgIGNtcF9zdWJzZXQoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgb3JkZXIpCiAgICB7CiAgICAgICAgdm9yZGVyLnJlc2l6ZShvcmRlci5zaXplKCkpOwogICAgICAgIGZvciAoaW50IGk9MDsgaTxvcmRlci5zaXplKCk7ICsraSkKICAgICAgICAgICAgdm9yZGVyLmF0KG9yZGVyW2ldKSA9IGk7CiAgICB9CiAgICAKICAgIGJvb2wgb3BlcmF0b3IoKShpbnQgbGhzLCBpbnQgcmhzKSBjb25zdAogICAgewogICAgICAgIHJldHVybiB2b3JkZXJbbGhzXSA8IHZvcmRlcltyaHNdOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IG9yZGVyID0gezUsIDAsIDQsIDMsIDIsIDEsIDcsIDZ9OwogICAgc3RkOjp2ZWN0b3I8aW50PiBzdWJzZXQgPSB7MCwgMSwgMiwgNX07CgogICAgZm9yIChhdXRvIHggOiBzdWJzZXQpCiAgICAgICAgc3RkOjpjb3V0IDw8IHggPDwgJyAnOwogICAgc3RkOjpjb3V0IDw8ICdcbic7CgogICAgc3RkOjpzb3J0KHN1YnNldC5iZWdpbigpLCBzdWJzZXQuZW5kKCksIGNtcF9zdWJzZXQob3JkZXIpKTsKICAgIAogICAgZm9yIChhdXRvIHggOiBzdWJzZXQpCiAgICAgICAgc3RkOjpjb3V0IDw8IHggPDwgJyAnOwogICAgc3RkOjpjb3V0IDw8ICdcbic7CgogICAgcmV0dXJuIDA7Cn0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K