Skip to content

splay

splay的长度可能会被干到\(O(N)\)(考虑从\(1\)\(n\)依次插入),但是只要访问过一次最远的节点,splay就会通过把最远节点旋转到根这个过程来调整树高,直至\(O(\log N)\)级别,均摊来说,只要访问的次数够多,均摊复杂度就是\(O(\log N)\);如果不访问,树高可能短暂存在\(O(N)\)的状态,~~但是不访问复杂度是0 (乐~~

delete

// 1. 有前驱后继
pre = getpre(x);
nxt = getnxt(x);
splay(pre, 0);
splay(nxt, pre);
delete(root->right->left);

// 2. 只用查找
find(x);
left = root->left;
right = root->right;
delete(root);
if(op == 1){ // 右并到左
    findmax(left);
    left->right = right;
}else{ // 左并到右
    findmin(right);
    right->left = left;
}