离散化
离散化:
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 |
感性理解一下就很简单了。