1.拷贝原数组
2.将拷贝的数组排序
3.利用unique()对拷贝数组去重,并记录不重复元素
4.利用lower_bound()找离散化后的数的位置。
注:注意下标究竟从几开始
离散化后的值可以理解为是在这个数组中第几大的值,所以如果要查询离散化的值在原数组中对应哪个数,我们直接查询 t[这个值]就行了。
用stl:
int find(int x)
{
int l=0,r=all.size();
while(l<r)
{
int mid=l+r>>1;
if(all[mid]>=x) r=mid;
else l=mid+1;
}
return l+1;
}
sort(all.begin(),all.end());
all.erase(unique(all.begin(),all.end()),all.end());
//用lower_bound
int idx=lower_bound(all.begin(),all.end(),x)-all.begin();
//lower_bound返回地址 再减去首地址
//或者自己写find
//int idx=find(x) x为一个大数,idx返回x在all的位置。
用数组:
int id[N];
sort(id + 1, id + 1 + n);
n = unique(id + 1, id + 1 + n) - id - 1;//n为现在的个数
int nowid=lower_bound(id + 1, id + 1 + n, x) - id;//查找x的位置
//lower_bound返回地址 再减去首地址(id就是首地址)