#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);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiAKZW51bSB7QVNDRU5ELCBERVNDRU5EfTsKIAp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpib29sIGFzY2VuZF9zb3J0KHBhaXI8dWludCwgVD4gaSwgcGFpcjx1aW50LCBUPiBqKXtyZXR1cm4gai5zZWNvbmQ+aS5zZWNvbmQ7fQogCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmJvb2wgZGVzY2VuZF9zb3J0KHBhaXI8dWludCwgVD4gaSwgcGFpcjx1aW50LCBUPiBqKXtyZXR1cm4gaS5zZWNvbmQ+ai5zZWNvbmQ7fQogCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgc29ydElkeCh2ZWN0b3I8dWludD4mIGlkeCwgY29uc3QgdmVjdG9yPFQ+JiBzcmMsIGludCBkaXI9QVNDRU5EKXsKICAgIHZlY3RvcjwgcGFpcjx1aW50LCBUPiAgPiB0bXAgKHNyYy5zaXplKCkpOwogICAgZm9yICh1aW50IGk9MDsgaTxzcmMuc2l6ZSgpOyBpKyspewogICAgICAgIHRtcC5wdXNoX2JhY2socGFpcjx1aW50LCBUPihpLCBzcmNbaV0pKTsKICAgICAgICBjb3V0IDw8IGkgPDwgIiAiIDw8IHNyY1tpXSA8PCAiIFxuIjsKICAgIH0KIAogICAgaWYgKGRpcj09QVNDRU5EKXsKICAgICAgICBzb3J0KHRtcC5iZWdpbigpLCB0bXAuZW5kKCksIGFzY2VuZF9zb3J0PFQ+KTsKICAgIH1lbHNlewogICAgICAgIHNvcnQodG1wLmJlZ2luKCksIHRtcC5lbmQoKSwgZGVzY2VuZF9zb3J0PFQ+KTsKICAgIH0KIAogICAgaWR4LnJlc2l6ZShzcmMuc2l6ZSgpKTsKIAogICAgZm9yICh1aW50IGk9MDsgaTxzcmMuc2l6ZSgpOyBpKyspewogICAgICAgIGlkeFtpXSA9ICh0bXBbaV0uZmlyc3QpOwogICAgICAgIGNvdXQgPDwgdG1wW2ldLmZpcnN0IDw8ICIgXG4iIDsKICAgIH0KfQogCmludCBtYWluKCl7CiAgICAgICAgCiAgICAgICAgdmVjdG9yPGZsb2F0PiBzcmM7CiAgICAgICAgc3JjLnB1c2hfYmFjaygzLjBmKTsKICAgICAgICBzcmMucHVzaF9iYWNrKDIuMGYpOwogICAgICAgIHNyYy5wdXNoX2JhY2soNC4wZik7CiAgICAgICAgCiAgICAgICAgdmVjdG9yPHVpbnQ+IHRtcDsgICAgICAgCiAKICAgICAgICBzb3J0SWR4KHRtcCwgc3JjKTsKfQ==