首页 > 其他分享 >splay-前驱后继

splay-前驱后继

时间:2024-07-04 10:58:08浏览次数:1  
标签:val int 后继 splay 前驱 root

在平衡树中,经常会让我们查一下一个值的前驱或后继是谁,写两个函数就非常麻烦好吧,所以这里咱们用一点小技巧来让他变

成一个函数(这里的前驱后继定义时包括与本身相等的值)

代码

点击查看代码
int nxt(int k)
	{
		if(!m[rt].size) return 0;
		int root=rt;
		while(k!=m[root].val&&m[root].ch[k>m[root].val])root=m[root].ch[k>m[root].val];
		splay(root);
		return root?m[root].val:m[rt].val;
	}

原理解析

这个代码本质是在查后继,但如果我们想再查前驱怎么办,只要再调用一次就好了,就像下面的操作一样

image

这里的 \(temp\) 是后继,\(mp\) 是前驱。

这实际上全是代码中 \(splay\) 的功劳,我们先将第一个大于等于 \(k\) 的值转到根,那么下一次第一次跳时肯定会往左子树

去跳,而左子树没有比 \(k\) 大的,所以只需要在其中找最大的那个值就是第一个小于等于 \(k\) 的值

标签:val,int,后继,splay,前驱,root
From: https://www.cnblogs.com/oceansofstars/p/18283169

相关文章

  • 全球半导体CVD和ALD用前驱体行业现状、重点企业分析及项目可行性研究报告(2024-2030)
    2024年7月3日环洋市场咨询机构出版了一份详细的、综合性的调研分析报告【全球半导体CVD和ALD用前驱体行业总体规模、主要厂商及IPO上市调研报告,2024-2030】。本报告研究全球半导体CVD和ALD用前驱体总体规模,包括产量、产值、消费量、主要生产地区、主要生产商及市场份额,同时分......
  • 平衡树专题Splay
    写在前面:部分来自孙宝(@Steven24)的博客,表示感谢。认识什么是Splay就是BST的一种,整体效率是很高的,均摊的次数是O(logn)级别的。基本操作就是把节点旋转到BST的root,从而改善BST的平衡性,但是很多人会在旋转中转晕建议找个动图看看,或是上B站找个几分钟的视频看看就理解了。烧烤......
  • Klipper RP2040 display ssd1306 0.96 屏幕配置
    接线屏幕接线parampinGNDGNDVCCVCCSCLSDA编码器接线parampinGNDGNDEN1VCCEN2CLklipper配置#显示屏及旋钮[display]lcd_type:ssd1306#i2c_bus:i2c0dencoder_pins:^gpio24,^gpio23encoder_steps_per_detent:2c......
  • [题解]P2042 [NOI2005] 维护数列 - Splay解法
    P2042[NOI2005]维护数列一道思路不难,但实现细节很多的平衡树题,调了一天半终于做出来了w。对于初始序列,我们可以直接构建一条链(毕竟一个一个调用插入函数也可能形成一条链)。题解有递归直接构建成一棵严格平衡的二叉树的,这样也可以,常数可能会小一点。其中区间反转就是裸的文艺......
  • [题解]P3391 文艺平衡树 - Splay解法
    P3391【模板】文艺平衡树给定序列\(1,2,\dots,n\),接下来\(m\)次操作,每次操作给定\(l,r\),你需要翻转\([l,r]\)。所有操作结束后,请输出这个序列。我们先从“普通平衡树”这一题出发,思考一下Splay操作的本质。我们把一个节点Splay到根节点后,中序遍历在自己前面的节点都在左边,中......
  • [笔记]Splay树
    前置知识:树的左旋、右旋。Splay树是一种平衡树。能够做到每个操作均摊\(O(\logN)\)。前言与上文AVL树不同之处在于,AVL树在任何操作结束后,都能保证每个节点的左右子树高度相差不超过\(1\)。相应地,每个操作都是严格的\(O(\logN)\)。而Splay树并没有对“平衡”的确切定义,任何结......
  • 5.3.2_3 在线索二叉树中找前驱后继
    ......
  • 错误处理:fmt::Display & std::error::Error
    错误处理为什么要给错误类型(如JsonError)实现fmt::Displaytrait?在Rust中,fmt::Displaytrait允许你定义一个类型如何被格式化为人类可读的字符串。这通常用于错误信息、日志记录或任何其他用户输出。实现fmt::Display需要定义fmt函数,该函数写入特定格式的数据......
  • css32 CSS Layout - display: inline-block
    https://www.w3schools.com/css/css_inline-block.aspThedisplay:inline-blockValueComparedtodisplay:inline,themajordifferenceisthatdisplay:inline-blockallowstosetawidthandheightontheelement.Also,withdisplay:inline-block,thetop......
  • css26 CSS Layout - The display Property
    https://www.w3schools.com/css/css_display_visibility.asp  CSSLayout-ThedisplayPropertyThedisplaypropertyisthemostimportantCSSpropertyforcontrollinglayout.ThedisplayPropertyThedisplaypropertyisusedtospecifyhowanelementi......