From db7f010622b29cb8f491c6bc76172d141c27ce70 Mon Sep 17 00:00:00 2001 From: GavinZhengOI <33168669+GavinZhengOI@users.noreply.github.com> Date: Sat, 20 Apr 2019 23:41:49 +0800 Subject: [PATCH] =?utf8?q?=E5=8F=91=E7=8E=B0=E4=BB=A3=E7=A0=81=E4=B8=80?= =?utf8?q?=E4=B8=AA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 初学splay,发现有点问题。请管理员仔细审核,因为我也不知道是不是对的QAQ 照理来说,rotate的操作是将子节点(x),转到父节点(y)之上。那么,在完成rotate操作后,y在下,x在上。而更新子树size的操作(代码中的maintain)是通过更改当前节点size为两个子节点之和来实现的。所以应该先更新在下面的y节点,再更新x。文中是不是更新顺序写反了? --- docs/ds/splay.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ds/splay.md b/docs/ds/splay.md index 7bcdca72..6a7309be 100644 --- a/docs/ds/splay.md +++ b/docs/ds/splay.md @@ -67,8 +67,8 @@ void rotate(int x) { fa[y] = x; fa[x] = z; if (z) ch[z][y == ch[z][1]] = x; - maintain(x); maintain(y); + maintain(x); } ``` -- 2.11.0