天天看点

数据离散化技巧

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

举个例子,题目给出一组数据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数组里了