标签:image 简单 center play .net 时间 blog style text
splay是如何减少时间复杂度呢?让我先研读一下代码QAQ每次访问某个节点时都把它旋转到根节点.
以下转自https://blog.csdn.net/qq_31640513/article/details/76944892
共有三种情况.
那不如直接上例题?(越来越懒)
区间旋转怎么做啊??
我会splay,但是好像还不够,我还会打标记!
考虑每次区间旋转的时候,我们可以找到区间l的前驱,把他旋转到根节点,这样根节点和根节点的右子树是[1,l-1],左子树是[l,n],然后我们把r的后继旋转到根节点的右儿子,这样根节点的右儿子和右儿子的子树就是[l+1,n],根节点的右儿子的左子树即为区间[l,r],打标记走人!
输出就简单了,dfs(root),对于当前节点x,如果有标记就把标记下传并交换左右子树,然后dfs(左儿子),然后输出x,然后dfs(右儿子).
为什么复杂度能够保证呢?好像要用到势函数或摊还分析,告辞.
标签:image 简单 center play .net 时间 blog style text
原文地址:https://www.cnblogs.com/qywyt/p/10363177.html