P1168 中位数题解

题目链接:https://www.luogu.com.cn/problem/P1168
题目描述:给定一个长度为 N 的非负整数序列 A,对于前奇数项求中位数。
思路讲解:最简单的想法就是每次取我们要的那段数组然后排序在输出中位数。确实可以,但是太慢了,直接超时。那就是说要缩短时间,那就可以直接用到堆这个东西。这玩意其实就一二叉树,比父节点大的都放右节点,小的就放在左节点。当然也没必要这么严格,因为堆只是取最顶端的那个节点那这个思路不就来了吗,咱直接就拿第一个当个标准点,创立两个堆,比它大的放一个堆,比它小的放另一个堆,然后每次添加新元素的时候把这个堆更新一下就可以了。然后当我们到达需要取中位数的那个节点也就是1,3,5等数的时候,将两个堆进行比较把多的那个堆的堆顶放少的那个堆,再把两个堆和标准值更新一下就可以了,当两个堆元素一样多的时候,那个标准值就是我们要的中位数

posted @ 2024-07-31 08:08  孤鹜长天-  阅读(12)  评论(0编辑  收藏  举报