#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
typedef unsigned int uint;
enum {ASCEND, DESCEND};
template<typename T>
bool ascend_sort(pair<uint, T> i, pair<uint, T> j){return j.second>i.second;}
template<typename T>
bool descend_sort(pair<uint, T> i, pair<uint, T> j){return i.second>j.second;}
template<typename T>
void sortIdx(vector<uint>& idx, const vector<T>& src, int dir=ASCEND){
vector< pair<uint, T> > tmp (src.size());
for (uint i=0; i<src.size(); i++){
tmp.push_back(pair<uint, T>(i, src[i]));
cout << i << " " << src[i] << " \n";
}
if (dir==ASCEND){
sort(tmp.begin(), tmp.end(), ascend_sort<T>);
}else{
sort(tmp.begin(), tmp.end(), descend_sort<T>);
}
idx.resize(src.size());
for (uint i=0; i<src.size(); i++){
idx[i] = (tmp[i].first);
cout << tmp[i].first << " \n" ;
}
}
int main(){
vector<float> src;
src.push_back(3.0f);
src.push_back(2.0f);
src.push_back(4.0f);
vector<uint> tmp;
sortIdx(tmp, src, DESCEND);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKCmVudW0ge0FTQ0VORCwgREVTQ0VORH07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpib29sIGFzY2VuZF9zb3J0KHBhaXI8dWludCwgVD4gaSwgcGFpcjx1aW50LCBUPiBqKXtyZXR1cm4gai5zZWNvbmQ+aS5zZWNvbmQ7fQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBkZXNjZW5kX3NvcnQocGFpcjx1aW50LCBUPiBpLCBwYWlyPHVpbnQsIFQ+IGope3JldHVybiBpLnNlY29uZD5qLnNlY29uZDt9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIHNvcnRJZHgodmVjdG9yPHVpbnQ+JiBpZHgsIGNvbnN0IHZlY3RvcjxUPiYgc3JjLCBpbnQgZGlyPUFTQ0VORCl7CiAgICB2ZWN0b3I8IHBhaXI8dWludCwgVD4gID4gdG1wIChzcmMuc2l6ZSgpKTsKICAgIGZvciAodWludCBpPTA7IGk8c3JjLnNpemUoKTsgaSsrKXsKICAgICAgICB0bXAucHVzaF9iYWNrKHBhaXI8dWludCwgVD4oaSwgc3JjW2ldKSk7CiAgICAgICAgY291dCA8PCBpIDw8ICIgIiA8PCBzcmNbaV0gPDwgIiBcbiI7CiAgICB9CgogICAgaWYgKGRpcj09QVNDRU5EKXsKICAgICAgICBzb3J0KHRtcC5iZWdpbigpLCB0bXAuZW5kKCksIGFzY2VuZF9zb3J0PFQ+KTsKICAgIH1lbHNlewogICAgICAgIHNvcnQodG1wLmJlZ2luKCksIHRtcC5lbmQoKSwgZGVzY2VuZF9zb3J0PFQ+KTsKICAgIH0KCiAgICBpZHgucmVzaXplKHNyYy5zaXplKCkpOwoKICAgIGZvciAodWludCBpPTA7IGk8c3JjLnNpemUoKTsgaSsrKXsKICAgICAgICBpZHhbaV0gPSAodG1wW2ldLmZpcnN0KTsKICAgICAgICBjb3V0IDw8IHRtcFtpXS5maXJzdCA8PCAiIFxuIiA7CiAgICB9Cn0KCmludCBtYWluKCl7CgkKCXZlY3RvcjxmbG9hdD4gc3JjOwoJc3JjLnB1c2hfYmFjaygzLjBmKTsKCXNyYy5wdXNoX2JhY2soMi4wZik7CglzcmMucHVzaF9iYWNrKDQuMGYpOwoJCgl2ZWN0b3I8dWludD4gdG1wOwkKCglzb3J0SWR4KHRtcCwgc3JjLCBERVNDRU5EKTsKfQ==