用一个数据结构模拟另一个数据结构。
我们发现:
插入的时候,首先找到它前驱和后继,在spalyspalyspaly中它们显然是连续的,一定有一个是另一个的祖先。那么我们就可以找到深的那个把新节点接在它下面。
单旋最小最大值,就是把它的儿子直接接到父亲上,并且把它取出来,把原树挂在它下面,此时它的子树以外的节点的深度都+1+1+1了。
删除最大最小值,就是把它的儿子直接接到父亲上,并把它扔掉,此时它子树中的节点的深度都−1-1−1了。
发现点权互不相同,那么我们就能用离散化权值线段树维护深度和计算前驱后继(就是维护关键码为keykeykey的节点的深度以及存不存在)
当然也得模拟出这棵树的结构,但是这并没有什么难度。