1:对原序列进行排序,使其按升序排列。
2:去掉序列中重复的元素。
3:此时序列中各位置的值和位置的序号就是离散化的映射方式。
含重复元素
for(int i=1;i<=n;i++) { cin>>a[i]; b[i]=a[i]; } sort(b+1,b+1+n); int len=unique(b+1,b+1+n)-b-1; for(int i=1;i<=n;i++) { a[i]=lower_bound(b+1,b+1+len,a[i])-b; cout<<a[i]<<" "; }
不含重复元素
struct node { int data; int id; bool operator < (const node &a)const { return data<a.data; } }a[maxn]; for(int i=1;i<=n;i++) { cin>>a[i]. a[i].id=i; } sort(a+1,a+1+n); for(int i=1;i<=n; b[a[i].id]=i; for(int i=1;i<=n;i++) cout<<b[i]<<" ";