参考自百度百科:
当数据值域很大但是数据个数不多的情况下,我们需要对数据进行离散化,这样方便我们处理数据。
离散化有三个步骤:
1.排序
2.去重
3.索引
用stl就能很好的实现:
举一个新鲜的例子:
1 n=read();
2 for(int i=1;i<=n;i++){
3 h_[i]=read();
4 h[i]=h_[i];
5 }
6 sort(h_+1,h_+n+1);
7 // int size=unique(h_+1,h_+n+1)-h_; 如果有重复元素的话
8 for(int i=1;i<=n;i++){
9 h[i]=lower_bound(h_+1,h_+n+1,h[i])-h_;
10 }
11 for(int i=1;i<=n;i++) printf("%d ",h[i]);
输入:
5
-1 23 -34 5 6
输出:
2 5 1 3 4