当数据很大,但是数并不多的时候,可能我们开不下那么大的数组,但是所求答案本身又与数本身的大小无关,只与数的相对大小有关,这时我们就可以把这些数相对大小不变的缩小,称之为离散化。我的离散化一直都是用的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中是第几个,他就是第几小的,他压缩之后的值就是这个,这样就可以保证数据的相对大小关系不被改变 }