蒟蒻的离散化模板

  当数据很大,但是数并不多的时候,可能我们开不下那么大的数组,但是所求答案本身又与数本身的大小无关,只与数的相对大小有关,这时我们就可以把这些数相对大小不变的缩小,称之为离散化。我的离散化一直都是用的stl,sort+unique+lower_bound

代码:

void lisan()
{
    sort(a+1,a+n+1);//排序是为了二分
    tot=unique(a+1,a+n+1)-a-1;//把数组中重复的元素放到最后面,并返回不重复元素的最后一个下标
    for(int i=1;i<=n;++i)
        b[i]=lower_bound(a+1,a+tot+1,b[i])-a;//a数组只是一个暂存的数组,现在的b数组才是保持着原来顺序的数组,因为a数组已经排过序了,
//所以b在a中是第几个,他就是第几小的,他压缩之后的值就是这个,这样就可以保证数据的相对大小关系不被改变
}

猜你喜欢

转载自www.cnblogs.com/yuelian/p/12295731.html