离散化
将一个值域为无穷的有限个数字,映射到size有穷的数组中。
例如 有1e5个数,取值范围是-1e9-1e9,若按照取值范围开数组就开不下,
但要是开1e5的大小,就可以,那我们得把这些数映射到数组下标,来完成离散化的操作。
通常是排序 去重。
vector<int>alls;
//存储所有待离散化的值
sort(alls.begin(),alls.end());
//将所有值排序
alls.erase(unique(alls.begin(),alls.end()),alls.end());
//去掉重复元素
//二分求出对应离散化的值
int Find(int nNum)
{
int nLeft = 0;
int nRight = alls.size() - 1;
while(nLeft < nRight)
{
int nMid = (nLeft + nRight) >> 1;
if(allsp[nMid] >= x)
{
nRight = nMid;
}
else
{
nLeft = nMid + 1;
}
}
return nRight + 1;
}