treap=tree+heap
1.BST:
1.当前节点左子树中任何一个点的权值<当前节点的权值
2.当前节点右子树中任何一个点的权值>当前节点的权值
BST中序遍历一定是从小到大
找前驱:
1.存在左子树:左子树最大值
2.不存在左子树:那就看父节点和祖先节点,
如果这个节点是祖先节点的右子树,那么祖先节点就是他的前去
treap:就是让BST尽量随机
treap维护l,r,key,val:val是随机值,key是二叉搜索树的key
满足中序遍历key是有序,val满足大根堆的性质
初始化:加两个哨兵,不用处理边界
插入:随便插在一个叶节点,然后给一个随机的val
回溯的时候就调整位置
左旋,右旋:
性质:旋转之后,不影响中序遍历
删除:使用旋转把节点旋转到右节点,然后删除
如果val r>val l:左旋
else 右旋