关于题解中的离散化
查看原帖
关于题解中的离散化
302458
Caesium楼主2021/2/19 10:10

因为开始被部分题解表述不清的离散化误导,所以想说几句,以下仅代表个人做题的一些推导过程,并不一定正确(我太蒟了)

首先,题解中讲到的离散化并不是为了通俗意义上的缩减空间复杂度,而我们是为了求出每个数的排名。先考虑sort+unique+lower_bound的离散化,算出每个数的排名,然后我们需要做的操作是

1.找出一个b数组中的元素bib_i(保存的是排名)
2.在a数组中找出一个与bib_i相同的元素,(也就是跟bib_i排名相同,然后把bib_i放进q数组中aia_i下标的位置(这部分的原理见题解)

至此,可以发现要实现只能一个个地遍历找有没有与aia_i相同的元素,再返回下标。换个思路,能不能把下标跟保存的排名换个位置,把排名当做下标,把下标当做排名,这样就可以通过O(1)的方式快速找出下标。处于这种考虑,我们发现实际上a并不需要离散化,因为在这种情况下直接排名就是下标,那不就是直接双关键词排个序的问题,开一个结构体保存id下标跟元素,然后根据元素大小排个序,此时每个在a数组中的元素下标就是他的排名,里面保存的id就是原来的下标,可以便捷访问(这一段比较难理解,可以模拟一下)

同样,对于b来说,既然我们要找出一个与他排名相同的数,那不如把b也按照相同方式排个序,这样两个对应的数的排名也是相同的了。所以可以发现离散化实际上并没有在这题用上,只是一个思考过程而已

如果有什么不对的可以指正,谢谢

2021/2/19 10:10
加载中...