离散化:

For(i,1,n){
	read(a[i].v);
    a[i].id=i;
}
sort(a+1,a+1+n);按v排序
For(i,1,n) b[a[i].id]=i;
For(i,1,n)read(a[i]),b[i]=a[i];
 sort(b+1,b+n+1);
len=unique(b+1,b+n+1)-b-1;
For(i,1,n) a[i]=lower_bound(b+1,b+len+1,a[i])-b;

这是离散化代码。

我来帮助理解一下:

v 1005 12 234 5 3421 11111 42
id 1 2 3 4 5 6 7

排序过后:

v 5 12 42 234 1005 3421 11111
id 4 2 7 3 1 5 6

最后赋值进b数组

b[1] b[2] b[3] b[4] b[5] b[6] b[7]
5 2 4 1 6 7 3

感性理解一下就很简单了。