针对无重复元素的离散化
1 for(i = 1;i <= n; ++i) p[i].pos = i,in(p[i].v); 2 sort(p+1,p+n+1); 3 int id = 0; 4 for(i = 1;i <= n; ++i) { 5 a[p[i].pos] = i; 6 }
$p[i].pos$为在原序列中的位置,$p[i].v$为要离散的值,$a$数组为离散后的值
针对有重复元素的离散化
1 for(i = 1;i <= n; ++i) p[i].pos = i,in(p[i].v); 2 sort(p+1,p+n+1); 3 int id = 0; 4 for(i = 1;i <= n; ++i) { 5 if(p[i].v > p[i-1].v) ++id; 6 a[p[i].pos] = id; 7 }