摘要:
这题合并栈让我们想到了左偏树。 我们可以维护val值为时间,dis值为size的左偏树,定义两个根root1和root2,表示两个栈的栈顶,建大根的左偏树。 接下来的插入,删除,两个栈合并都是左偏树的基本操作,直接写即可,代码里有注释。 cpp include define maxn 100001 阅读全文
摘要:
就是一模板题。 合并就直接merge。 pop就是将自己的值设为一,再将自己的左右儿子合并即可。 查询直接找到堆顶,输出。 "模板左偏树" 代码: cpp include using namespace std; int dis[1000001],ch[1000001][2],fa[1000001] 阅读全文
摘要:
一、左偏树的性质 左偏树,又称可并堆,所以他有堆的性质。 定义几个量:$val$表示该节点的值,$fa$表示该节点的父亲,$ch[2]$表示该节点的两个儿子(因为他是二叉树),$dis$表示这个节点到离他最近的叶子节点的距离。 性质一:该节点的val不大于该节点左右儿子的val 证明:堆。 性质二: 阅读全文