inline void rotateR(Node *x)
{
if(x->fa==NULL)return;
int f=d(x->fa);
x->fa->lc=x->rc;
if(x->rc)x->rc->fa=x->fa;
x->rc=x->fa;
Node *q=x->fa->fa;
x->fa->fa=x;
x->fa=q;
if(q)
if(f)q->rc=x;
else q->lc=x;
maintain(x->rc);
maintain(x);
if(x->fa==NULL)root=x;
}
inline void rotateL(Node *x)
{
if(x->fa==NULL)return;
int f=d(x->fa);
x->fa->rc=x->lc;
if(x->lc)x->lc->fa=x->fa;
x->lc=x->fa;
Node *q=x->fa->fa;
x->fa->fa=x;
x->fa=q;
if(q)
if(f)q->rc=x;
else q->lc=x;
maintain(x->lc);
maintain(x);
if(x->fa==NULL)root=x;
}
蒙了,有时候会丢失节点,有时候又冒出随机数,感觉像哪里没判NULL,但是好像没问题啊?