1.离散化:把数值较大的数从1 ~ n开始映射
a.给数组排序
b.数组中可能存在重复元素,去重
c.用二分算出x离散化后的值
2.模板:
vector[HTML_REMOVED] a;//存储所有代离散值
sort(a.begin(), a.end());//排序
a.erase(unique(a.begin(), a.end()), a.end());//去重
//二分求出x对应的离散化的值
int find(int x)
{
int l = 0, r = a.size() - 1;
while(l < r)
{
int mid = l + r >> 1;
if(x >= a[mid]) r = mid;
else l = mid + 1;
}
return r + 1;//映射到1……n
}