数据离散化,就是当我们只在乎题目所给的数据之间的大小关系,而忽略每一个数据的大小属性时,将数据离散化为较小较为容易处理的数据,而不影响最后结果。

举个例子,题目给出一组数据5,4,4,2,8,你只关心他们之间的大小关系,此时就可以将数据离散化为3,2,2,1,4,你会发现每个数据之间的大小关系并没有变化,而数据大小范围缩小了很多。

伪代码如下:

struct node{
int x;
int pos;
}a[N];
for(int i = 1; i <= n; i++){
scanf("%d", &a[i].x);
a[i].pos = i;
}
sort(a+1, a+1+n, cmp);
for(int i = 1; i <= n; i++){
if(i > 1 && a[i].x == a[i-1].x){
b[a[i].pos] = b[a[i-1].pos];
continue;
}
b[a[i].pos] = i;
}

此时a数组的数据就已经离散化到b数组里了