给与一个数组,元素个数不多,大概100万。但是每个元素大小可以很大(long long范围内)。
比如 8 10 -6 10。哈希映射后为2 3 1 3.
接口:给与一个数组a[1:n]。返回哈希后的数组。
\
bool cmp(int x, int y) {
return a[x] < a[y];
}
sort(id + 1, id + n + 1, cmp);
int pre = a[id[1]]; a[id[1]] = 1;
for (int i = 2, cur = 1; i <= n; ++i) {
if(a[id[i]] != pre) {
pre = a[id[i]];
a[id[i]] = ++cur;
}else a[id[i]] = cur;
}
写题中的副产品。
\