离散化

介绍数组离散化

vector<int>alls; //存储所有值
sort(alls.begin(),alls.end()); //将所有值排序
alls.erase(unique(alls.begin(),alls.end()),alls,end()); //去掉重复元素

inline int query(int x)
{
return lower_bound(b + 1,b + m + 1,x) - b;
}

 

unique(a,b)的操作是对a到b(迭代器)之间的元素去重,返回值是一个迭代器,去重后结束后的最后一个元素的后一个位置(即第一个重复的元素),其原理是把不重复的元素往前提;

而后all.earse(a,b)用来清除a到b(不包括b)的所有元素

inline内嵌函数,加快速度(一般调用次数不太大时)

//lower_bound(a,a+n,x) - a 返回第一个大于等于x 当前目标值指针
//upper_bound(a,a+n,x) - a 返回第一个大于x 当前目标值指针

//lower_bound(a,a+n,x,greater<int>()) - a 返回第一个小于等于x 当前目标值指针
//upper_bound(a,a+n,x,greater<int>()) - a 返回第一个小于x 当前目标值指针

posted @ 2021-11-21 10:39  兮何其  阅读(25)  评论(0)    收藏  举报