离散化
概念
将一个较大的区间映射到一个小的区间中,因为这个较大的区间是离散的,如果开辟一个大小跟这个区间一致的数组会造成浪费,遍历的话会超时,所以我们需要映射
映射:
vector<int> alls;//存储所有带离散化的值
sort(alls.begin(), alls.end()); //排序
alls.erase(unique(alls.begin(), alls.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开始
}
unique函数:
包含于algorithm头文件中,将重复的元素移动到数组末尾,返回迭代器,迭代器指向不重复的最后一个元素

浙公网安备 33010602011771号