参考自百度百科:
当数据值域很大但是数据个数不多的情况下,我们需要对数据进行离散化,这样方便我们处理数据。
离散化有三个步骤:
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