当处理一些值域较大,但个数相对较小的数据时,可以进行离散化处理。
(下面的操作单指保序的离散操作)
思路:将离散化的数值 由小到大 去重的 按下标1~n存放在数组中;然后需要调用的时候 直接使用对应数组下标取出 即可
代码:
离散化:
vector<int> alls;//储存
sort(alls.begin(),alls.end());//对a数组排序
alls.erase(unique(alls.begin(),a.end()),alls.end());//去重
找到对应值 进行处理:(二分)
int find(int x)
{
int l=0,r=alls.size()-1;
while(l<r)
{
int mid=l+r>>1;
if(alls[mid]>=x) r=mid;
else l=mid+1;
}
return r+1;// 表示映射到1~alls.size() 若return r;//表示映射0~alls.size()-1
}