#include <algorithm>
#include <iostream>
#include <vector>
template <typename T>
std::vector<std::size_t> compute_order(const std::vector<T>& v)
{
std::vector<std::size_t> indices(v.size());
std::iota(indices.begin(), indices.end(), 0u);
std::sort(indices.begin(), indices.end(), [&](int lhs, int rhs) {
return v[lhs] < v[rhs];
});
std::vector<std::size_t> res(v.size());
for (std::size_t i = 0; i != indices.size(); ++i) {
res[indices[i]] = i;
}
return res;
}
int main() {
const auto order = compute_order<int>({40, 20, 10, 30});
for (const auto& e : order) {
std::cout << " " << e;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiBjb21wdXRlX29yZGVyKGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiB2KQp7CglzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gaW5kaWNlcyh2LnNpemUoKSk7CglzdGQ6OmlvdGEoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLCAwdSk7CglzdGQ6OnNvcnQoaW5kaWNlcy5iZWdpbigpLCBpbmRpY2VzLmVuZCgpLCBbJl0oaW50IGxocywgaW50IHJocykgewogICAgICAgIHJldHVybiB2W2xoc10gPCB2W3Joc107CiAgICB9KTsKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiByZXModi5zaXplKCkpOwogICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSAhPSBpbmRpY2VzLnNpemUoKTsgKytpKSB7CiAgICAJcmVzW2luZGljZXNbaV1dID0gaTsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KCmludCBtYWluKCkgewoJY29uc3QgYXV0byBvcmRlciA9IGNvbXB1dGVfb3JkZXI8aW50Pih7NDAsIDIwLCAxMCwgMzB9KTsKCWZvciAoY29uc3QgYXV0byYgZSA6IG9yZGVyKSB7CgkJc3RkOjpjb3V0IDw8ICIgIiA8PCBlOwoJfQp9