# 离散化

离散化

  • 值得注意的是:unique()函数去重之后并不是把重复元素放在最末尾,而是类似于删除了这个数,然后末尾元素保持不变,比如1 2 2 3去重之后是1 2 3 3,这里大部分博客都是错的。至少我用代码跑出的结果是这样的,所有去重之后的数组不能乱用。
//discretiza

sort(t,t+n);

int m=unique(t,t+n)-t;//得到去重之后的元素个数

//两种写法
//预处理
for(int i=0;i<n;i++){
	a[i]=upper_bound(t,t+m,a[i])-t;
}
//离散化后的值从0开始
//a[i]为离散化后**原数组**对应的值
//t[]为排序后的顺序
//t[a[i]]为原数组对应的值


//每次使用的时候查询
inline int find(int x){
    return lower_bound(a, a + m, x) - a;
}
posted @ 2019-07-18 18:07  yhsmer  阅读(138)  评论(0编辑  收藏  举报