常用于稀疏区间
vector<int> all; // 存储所有待离散化的值
sort(all.begin(), all.end());
all.erase(unique(all.begin(), all.end()), all.end()); // 去重
// 二分求x离散化的值
int find(int x) // 找到第一个大于等于x的位置
{
int l = 0, r = all.size() - 1;
while (l < r)
{
int mid = l + r >> 1;
if (all[mid] >= x)
{
r = mid;
}
else
{
l = mid + 1;
}
}
return r ; // 映射到0,1,...,n-1
}