离散化

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]<<" ";
    }
View Code

不含重复元素

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]<<" ";    
View Code
原文地址:https://www.cnblogs.com/iwomeng/p/11564745.html