天天看點

資料離散化技巧

資料離散化,就是當我們隻在乎題目所給的資料之間的大小關系,而忽略每一個資料的大小屬性時,将資料離散化為較小較為容易處理的資料,而不影響最後結果。

舉個例子,題目給出一組資料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數組裡了