zoukankan      html  css  js  c++  java
  • 对顶堆

    这个玩意是可以动态维护第k大的值,每次操作logn。

    大根堆Q1

    q1:维护集合中较小值的部分的最大值。

    小根堆Q2q

    q2:维护集合中较大值的部分的最小值。

    听不懂?没关系,接着看

    为了方便,我们用鸡和凤来比喻这两个堆

    换句话来说,以鸡头凤尾来比喻这两个堆,q1的堆顶就是鸡头,q2的堆顶就是凤尾;

    由此可见,q2.top>q1.top;

    关于插入:

         如果新来的小崽比鸡头还厉害,那么它就进入凤堆(否则它会对上天的选择不满);否则进入鸡堆;可以发现,这样操作并不破坏原有的特性;

    关于调整:

         有时小鸡的数量比凤的数量要小得多,那么为了让凤得到优越感,她们会将凤群中的弱者打回小鸡(别问我怎么打的),也就是把凤堆的尾巴改成鸡头,直到两者的数量处于平衡态(目前你不需要理解什么是平衡态,下面会说到);

       如果反之,那么小鸡中的佼佼者便会经历涅槃成凤,成为凤尾。

    关于询问:

         如果问第k大的值,我们发现,如果凤堆中一共有k只凤,那么凤尾(堆顶)便是答案,那么之前所说的调整中的平衡态便是维持凤堆中的凤的数量等于k;

    看懂凤鸡之间的关系了吗?如果看懂了那么你就会对顶堆了;

    下面简述对顶堆:

    维护小根堆的数量是k,通过和大根堆之间的元素转移来维护这个性质;

  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11492958.html
Copyright © 2011-2022 走看看