离散化

概念

将一个较大的区间映射到一个小的区间中,因为这个较大的区间是离散的,如果开辟一个大小跟这个区间一致的数组会造成浪费,遍历的话会超时,所以我们需要映射

映射:

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头文件中,将重复的元素移动到数组末尾,返回迭代器,迭代器指向不重复的最后一个元素

posted @ 2023-01-23 21:43  咕噜噜冒泡  阅读(22)  评论(0)    收藏  举报