#include <algorithm>
#include <iostream>
#include <iterator>
#include <utility>
#include <vector>
using namespace std;
vector<size_t> rankSort(const float* v_temp, const size_t size) {
vector<pair<float, size_t> > v_sort(size);
for (size_t i = 0U; i < size; ++i) {
v_sort[i] = make_pair(v_temp[i], i);
}
sort(v_sort.begin(), v_sort.end());
pair<double, size_t> rank;
vector<size_t> result(size);
for (size_t i = 0U; i < size; ++i) {
if (v_sort[i].first != rank.first) {
rank = make_pair(v_sort[i].first, i);
}
result[v_sort[i].second] = rank.second;
}
return result;
}
int main() {
const float v_temp[] = { 10.0F, 332.0F, 42.0F, 0.9F, 0.0F, 42.0F };
const vector<size_t> v_sort = rankSort(v_temp, sizeof(v_temp) / sizeof(*v_temp));
copy(v_sort.begin(), v_sort.end(), ostream_iterator<size_t>(cout, " "));
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxzaXplX3Q+IHJhbmtTb3J0KGNvbnN0IGZsb2F0KiB2X3RlbXAsIGNvbnN0IHNpemVfdCBzaXplKSB7Cgl2ZWN0b3I8cGFpcjxmbG9hdCwgc2l6ZV90PiA+IHZfc29ydChzaXplKTsKCglmb3IgKHNpemVfdCBpID0gMFU7IGkgPCBzaXplOyArK2kpIHsKCQl2X3NvcnRbaV0gPSBtYWtlX3BhaXIodl90ZW1wW2ldLCBpKTsKCX0KCglzb3J0KHZfc29ydC5iZWdpbigpLCB2X3NvcnQuZW5kKCkpOwoKCXBhaXI8ZG91YmxlLCBzaXplX3Q+IHJhbms7Cgl2ZWN0b3I8c2l6ZV90PiByZXN1bHQoc2l6ZSk7CgoJZm9yIChzaXplX3QgaSA9IDBVOyBpIDwgc2l6ZTsgKytpKSB7CgkJaWYgKHZfc29ydFtpXS5maXJzdCAhPSByYW5rLmZpcnN0KSB7CgkJCXJhbmsgPSBtYWtlX3BhaXIodl9zb3J0W2ldLmZpcnN0LCBpKTsKCQl9CgkJcmVzdWx0W3Zfc29ydFtpXS5zZWNvbmRdID0gcmFuay5zZWNvbmQ7Cgl9CglyZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbigpIHsKCWNvbnN0IGZsb2F0IHZfdGVtcFtdID0geyAxMC4wRiwgMzMyLjBGLCA0Mi4wRiwgMC45RiwgMC4wRiwgNDIuMEYgfTsKCWNvbnN0IHZlY3RvcjxzaXplX3Q+IHZfc29ydCA9IHJhbmtTb3J0KHZfdGVtcCwgc2l6ZW9mKHZfdGVtcCkgLyBzaXplb2YoKnZfdGVtcCkpOwoKCWNvcHkodl9zb3J0LmJlZ2luKCksIHZfc29ydC5lbmQoKSwgb3N0cmVhbV9pdGVyYXRvcjxzaXplX3Q+KGNvdXQsICIgIikpOwp9