前言
本来想着dict是ordered的,直接用dict查重+查询就能过了,没想到被卡哈希了.既然哈希不行,py中也没红黑树实现的set,那就直接排序查重吧.
解题思路
要保证$a_i$在$[b_1,b_2,b_3,…,b_i]$中是众数,只要保证$b_n$任意数都众数,即$b_n$无重复数,和保证$a_i$在$b_n$中且所在位置$j \leq i$,按照此思路即可构造出符合要求的数组.
实现原理
排序
既要保证插入顺序,又要排序,那只能是创建一个元组,记录顺序和值,py中的enumerate
很好的实现了这点需求,而后用sorted(a,key=lambda x:x[1])
即可得到按值排序的数组.
去重
去重就很简单了,排序之后相同值是挨在一起的,可以在线性时间内完成去重.
重排
按插入时的顺序重新排序即可.
构造
已有sorted数组和ordered数组,将sorted数组中间的空隙提出放在$b_n$尾部即可
实现代码
1 | from itertools import chain, pairwise |
- 本文链接: https://www.zh314.xyz/2024/12/18/CF2044-D-Harder-Problem-题解/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。