前言

上一节我们学习了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详解(三)相关推荐

  1. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  2. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  3. Windows 7防火墙设置详解(三)

    Windows 7防火墙设置详解(三) 一.如何禁用或启用规则 方法:只需要在需要禁用或启动的规则上,鼠标右键选择启用或禁止规则即可,或点击右侧的操作栏进行规则启用或禁止. 二.入站规则和出站规则 由 ...

  4. Android Studio 插件开发详解三:翻译插件实战

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78113868 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  5. 数据结构--图(Graph)详解(三)

    数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...

  6. SharePoint2007安装图文详解三:安装SqlServer2005

    SharePoint2007 中的很多功能会用到数据库,如分析服务,报表服务等.本文介绍SqlServer2005的安装,数据库的安装很简单,基本上安装默认选项点击下一步即可,需要注意的地方在下面会提 ...

  7. C语言中三个数比较大小详解——三种方法

    ​ C语言中三个数比较大小详解--三种方法 方法一:if-else法 方法二:函数法 方法三:三目运算符法 C语言中比较三个数的大小有很多方法,以下是我总结的三种方法: 首先我定义 int a = 1 ...

  8. MQTT协议详解 三、MQTT控制包(CONNECT)

    文章目录 系列文章目录 前言 CONNECT(客户端请求连接服务端) 一.固定包头(2字节) 二.可变包头(10字节) 协议名字(6字节) 协议等级(1字节) 连接标识(1字节) Clean Sess ...

  9. PackageManagerService启动详解(三)之开始初始化阶段流程分析

      PKMS启动详解(三)之BOOT_PROGRESS_PMS_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系列博客概要 PKMS ...

  10. DID会固定年份吗_倍分法DID详解 (三):多时点 DID (渐进DID) 的进一步分析

    作者:王昆仑 (天津大学) E-mail: shawn0513@163.com 连享会专题课程:DSGE 模型及应用 连享会 DSGE 专题课程 这是连享会「倍分法(DID)专题推文」系列的第三篇文章 ...

最新文章

  1. Vue——显示微信用户名称中enjoin表情
  2. linux学习笔记(5)
  3. python画一个点_pygame学习笔记(2):画点的三种方法和动画实例
  4. geforce experience不能登录_青椒第二课堂禁毒平台|官方网站登录
  5. ubuntu NGINX uwsgi https 部署Django 遇到的问题
  6. Linux架构之NFS共享存储1
  7. bootstrap 黑边框表格样式_Excel表格如何添加绘制边框?
  8. js先执行一个方法再往下执行_轻松理解JS中的面向对象,顺便搞懂prototype和__proto__...
  9. windows版redis报错:本地计算机上的Redis服务启动后停止
  10. 关于winpcap发包速度低的问题
  11. 基于stm32风力摆控制系统(电赛获得省一)
  12. 关于LM2596S-5.0电流声问题——输出电容选择
  13. 光模块SFP基础接口标准入门
  14. 深入理解Zend执行引擎
  15. 计算机组成原理笔记——机器指令
  16. 冰蝎软件的配置与应用
  17. 求一元二次方程的根(YZOJ-1048)
  18. 【OCR技术】大批量构造中文文字训练集
  19. 计算机数据存储概念,计算机数据存储的基本概念
  20. glTF学习笔记(0)——概述

热门文章

  1. linux信任本地jar包,jar包在linux本地运行成功, 但是jenkins构建失败
  2. 解决mendeley不能输入中文的情况
  3. std在汇编语言是什么指令_汇编语言程序指令整理
  4. 转https_PDF怎么转成JPG最简单?分享免费的PDF转图片方法
  5. 计算机的数据通信的概念,计算机数据通信基础知识.ppt
  6. java的写法作文,RxJava系列文章(二) - 网络图片添加水印RxJava写法
  7. SQL分割字符串详解
  8. 基于人脸识别的课堂签到管理系统(四)---摄像头上传实时数据,百度AI读取并返回信息以及多线程操作
  9. vb串口 任意波特率_串口通讯基本知识
  10. AIX 64位内核与32位内核区别