ABC451反思
$A,B $ \(AC\)
\(C\)题:
这题其实一个堆排序就能做,我也想了,但算出时间复杂度为\(O(Q²logQ)\)时间太大,后来问了\(deepseek\)说如果全是\(2\)操作时间复杂度其实是\(O(Q)\)因为没有树,所以在一半\(1\)操作,一半\(2\)操作是时间复杂度最大,为\(O(QlogQ)\),所以可以用堆排序
\(C\)题总结:什么情况下优先考虑堆?
- 需要快速获取最值,且数据是动态插入/删除的。
- 问题可以转化为每次取最小/最大的若干元素,然后放入新的元素。
- 朴素方法(如每次排序或线性扫描)会超时,而堆能保证 \(O(log n)\) 的插入/删除。
堆不是“排序算法”,而是一个在线维护有序结构的工具,适合处理流式数据或实时决策。
\(D\)题:
这题是在数后面接一个数,其实只要用set一边排序一边去重的特性来做就好了,每次和\(BFS\)一样先取最前面的元素,然后删掉,再把处理好的元素加进去,最后取最开头的元素就好了。因为删去了前\(n-1\)小的元素,所以直接输出就好了。(设\(0\)为第\(0\)小的元素)

浙公网安备 33010602011771号