splay详解(三)
前言
上一节我们学习了splay所能解决的基本问题,这节我来讲一下splay怎么搞区间问题
实现
splay搞区间问题非常简单,比如我们要在区间$l,r$上搞事情,那么我们首先把$l$的前驱旋转到根节点
再把$r$的后继旋转到根节点的右儿子
那么此时根节点的右儿子的左儿子所代表的就是区间$l,r$
这个应该比较好理解
然后就可以像线段树的lazy标记一样,给区间$l,r$打上标记,延迟更新,比如区间反转的时候更新的时候直接交换左右儿子
这里有一个技巧:如果一个区间被打了两次,那么就相当于不打
所以我们用一个bool变量来储存该节点是否需要被旋转
下传函数可以这么写
inline void pushdown(int x) {if(tree[x].rev){swap(tree[x].ch[0],tree[x].ch[1]);tree[tree[x].ch[0]].rev^=1;tree[tree[x].ch[1]].rev^=1; tree[x].rev=0;} }
注意每次rotate的时候先下传标记
例题
洛谷P3391 【模板】文艺平衡树(Splay)
http://www.cnblogs.com/zwfymqz/p/7899355.html
洛谷P3165 [CQOI2014]排序机械臂
http://www.cnblogs.com/zwfymqz/p/7899271.html
转载于:https://www.cnblogs.com/zwfymqz/p/7899379.html
splay详解(三)相关推荐
- Android init.rc文件解析过程详解(三)
Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...
- linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)
linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...
- Windows 7防火墙设置详解(三)
Windows 7防火墙设置详解(三) 一.如何禁用或启用规则 方法:只需要在需要禁用或启动的规则上,鼠标右键选择启用或禁止规则即可,或点击右侧的操作栏进行规则启用或禁止. 二.入站规则和出站规则 由 ...
- Android Studio 插件开发详解三:翻译插件实战
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...
- 数据结构--图(Graph)详解(三)
数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...
- SharePoint2007安装图文详解三:安装SqlServer2005
SharePoint2007 中的很多功能会用到数据库,如分析服务,报表服务等.本文介绍SqlServer2005的安装,数据库的安装很简单,基本上安装默认选项点击下一步即可,需要注意的地方在下面会提 ...
- C语言中三个数比较大小详解——三种方法
C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...
- MQTT协议详解 三、MQTT控制包(CONNECT)
文章目录 系列文章目录 前言 CONNECT(客户端请求连接服务端) 一.固定包头(2字节) 二.可变包头(10字节) 协议名字(6字节) 协议等级(1字节) 连接标识(1字节) Clean Sess ...
- PackageManagerService启动详解(三)之开始初始化阶段流程分析
PKMS启动详解(三)之BOOT_PROGRESS_PMS_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKMS ...
- DID会固定年份吗_倍分法DID详解 (三):多时点 DID (渐进DID) 的进一步分析
作者:王昆仑 (天津大学) E-mail: shawn0513@163.com 连享会专题课程:DSGE 模型及应用 连享会 DSGE 专题课程 这是连享会「倍分法(DID)专题推文」系列的第三篇文章 ...
最新文章
- Vue——显示微信用户名称中enjoin表情
- linux学习笔记(5)
- python画一个点_pygame学习笔记(2):画点的三种方法和动画实例
- geforce experience不能登录_青椒第二课堂禁毒平台|官方网站登录
- ubuntu NGINX uwsgi https 部署Django 遇到的问题
- Linux架构之NFS共享存储1
- bootstrap 黑边框表格样式_Excel表格如何添加绘制边框?
- js先执行一个方法再往下执行_轻松理解JS中的面向对象,顺便搞懂prototype和__proto__...
- windows版redis报错:本地计算机上的Redis服务启动后停止
- 关于winpcap发包速度低的问题
- 基于stm32风力摆控制系统(电赛获得省一)
- 关于LM2596S-5.0电流声问题——输出电容选择
- 光模块SFP基础接口标准入门
- 深入理解Zend执行引擎
- 计算机组成原理笔记——机器指令
- 冰蝎软件的配置与应用
- 求一元二次方程的根(YZOJ-1048)
- 【OCR技术】大批量构造中文文字训练集
- 计算机数据存储概念,计算机数据存储的基本概念
- glTF学习笔记(0)——概述
热门文章
- linux信任本地jar包,jar包在linux本地运行成功, 但是jenkins构建失败
- 解决mendeley不能输入中文的情况
- std在汇编语言是什么指令_汇编语言程序指令整理
- 转https_PDF怎么转成JPG最简单?分享免费的PDF转图片方法
- 计算机的数据通信的概念,计算机数据通信基础知识.ppt
- java的写法作文,RxJava系列文章(二) - 网络图片添加水印RxJava写法
- SQL分割字符串详解
- 基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回信息以及多线程操作
- vb串口 任意波特率_串口通讯基本知识
- AIX 64位内核与32位内核区别