AcWing 839. 模拟堆 2022/5/30
作者:互联网
关键代码:
void head_swap(int a, int b){
swap(ph[hp[a]], ph[hp[b]]);
swap(hp[a], hp[b]);
swap(h[a], h[b]);
}
思想:
如何解决插入的第 k 个数是什么?在链表中,idx 取 第几个插入的数,idx 与 k 一一对应,对于堆来说,由于堆是一棵完全二叉树,适合以下表连接各个节点之间的关系,所以应当将第几个插入的数与下标相对应。于是产生了ph[i] = a; 但在交换a, b两个位置的数时,ph[i] = a 、ph[j] = b 也需要交换,但仅仅靠swap(ph[i], ph[j])不能完全交换,还需要交换i,j,因此需要hp[a] = i, hp[b] = j数组作为ph数组的反函数进行操作。
标签:839,第几个,hp,30,交换,插入,swap,2022,ph 来源: https://www.cnblogs.com/gaoweiextraordinary/p/16325724.html