数据离散化是一个非常重要的思想。
为什么要离散化?当以权值为下标的时候,有时候值太大,存不下。 所以把要离散化的每一个数组里面的数映射到另一个值小一点的数组里面去。
数据离散化分为下面三个步骤
1、排序
2、去重
3、索引
这里需要用到两个stl函数
unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址;
函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。【ps.upper_bound是返回第一个大于b[x]的指针,upper_bound()= lower_bound()+1】
int lsh[N],a[N],len
for(int i=0;i<n;i++){
cin>>a[i];
lsh[i]=a[i];
}
sort(lsh,lsh+n);//排序
len=unique(lsh,lsh+n)