有些数据本身很大, 自身无法作为数组的下标保存对应的属性。
如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理!
离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。
例如
91054与52143的逆序对个数相同。
那么就可以把91054表示成52143。
那么离散化如何实现呢?
用另外一个数组b,排序后再用b数组的顺序来对a数组赋值。
可以这样写:
for(int i=1; i<=n; i++) {
cin>> b[i].val;
b[i].id= i;
}
sort(b+1, b+n+1, cmp);(对值进行排序)
for(int i=1; i<=n; i++) a[b[i].id]= i;
如:
1,3,3,5,6表示为1,2,2,3,5
所以要加入一个变量k记录顺序。
for(int i=1; i<=n; i++) {
cin>> b[i].val;
b[i].id= i;
}
sort(b+1, b+n+1, cmp);(对值进行排序)
int k=0;
for(inti=1; i<=n; i++){
if(i==1||b[i].val!=b[i-1].val) k++;
a[b[i].id]= k;
}