大家如果不幸看到了这篇博客,一定会在心里默默的说,离散化还需要写一篇博客???
没错,和大家想的不一样,本篇博客没有什么高深的技能,这是一篇离散化模板,纯的。
如果你正好不懂怎么离散化,那就可以看这篇博客学习一下啦!
没有人不懂离散化的把
首先解决一个问题,什么是离散化。
现在给大家一个序列,25957 6405 15770 26287 26465
我们要求出这个序列的第3大,很明显就可以看出来是25957。
那么,假如我们要知道序列的第3大在第几个怎么办呢,很显然,第3大就在第1位嘛。
那么,大家再来看一个序列,3 1 2 4 5,我们要知道序列第3大在第几位,显然也是第1位。
3 1 2 4 5就是对25957 6405 15770 26287 26465的离散化之后的结果
是不是很简单呀。
可是这样做有什么意义呢?
如果原本序列是1e9的量级的话,而本身又是比较稀疏的序列,我们就可以离散化之后放进数组里标记啦!(什么?你说map<long long,ing>也可以???对对对,你说的都对)。
下面我们就来介绍一下怎么离散化吧。
很显然,离散化就是找他在原序列里是第几个,我们就可以将原序列拷贝一份,然后排序,然后在排序后的序列内二分查找原序列的值就可以了,由于lower_bound返回的就是下标,所以我们考虑使用lower_bound来二分查找。
离散化之前一定要先去重,不然的话,lower_bound返回的就不对了。
sort(ans.begin(),ans.end