联赛前为了填知识点,简单学了一下比较常用的高级数据结构,都没有太深入的理解,于是现在重新搞一遍。

其实有了set和multiset,那么我们就没有再手写平衡树的必要了,所以treap的应用就相对于Splay来说少的多。

Splay主要用于维护序列上的问题,和DFS序等结合可以产生很多种的应用。

这几天刚开始搞的时候比较naive,一上去就搞了个四合一的维护数列,然后慢慢写,慢慢调。

当时写维护数列的时候有一个很大的疑问就是在打标记的时候是否需要updata(reload),因为splay和线段树不一样,存在树形的变换,特别是当很多个标记存在时,标记下传过早或者标记下传不够及时都会出现意想不到的错误。

但是数列相关的题目往往是不需要向上进行updata的,因为我们一般在对一段序列进行魔改的时候要先确定那个区间,然后在树的根节点上打上一个标记。

但是我们在确定区间的限制节点时会自根向下走,这时候该下传的标记就已经下传好了,这是我在写括号序列那道题时才反应过来。

但是为什么维护数列那道题就需要每次修改完就updata呢?因为有区间的插入和删除,这时候根节点siz的大小就会改变,这就会导致确定排名时节点方向选择错误,很容易出现死循环的情况。

还有就是维护数列那道题需要输出一个根节点的信息,同样对于所有操作都需要进行updata。

另外就是DFS序相关的题..那道题到现在还没有调过,具体原因不明,但是再往下调就有点浪费时间了。

DFS序有时候会有更改某个子树的根,刚开始我非常naive的就拿在原树中的siz确定了左右区间,但是在换根的时候原树的siz也会变。

大概就是这些吧..

splay是个非常有用的数据结构,即使恶心也要充分理解,NOI前要再来一波,把那些叉掉的题补回来。

再论Splay的更多相关文章

  1. HDU 1754区间最值 & SPLAY

    真是亲切的1754啊..第一道傻逼版的线段树做的是这个,后来学了zkw做的是这个,在后来决定打lrj线段树又打了一遍,如今再用splay和老朋友见面   从上到下依次为:加了读入优化的splay,sp ...

  2. [转] Splay Tree(伸展树)

    好久没写过了,比赛的时候就调了一个小时,差点悲剧,重新复习一下,觉得这个写的很不错.转自:here Splay Tree(伸展树) 二叉查找树(Binary Search Tree)能够支持多种动态集 ...

  3. 【Splay 总结】

    很多年前学的splay已经忘了? BZOJ 3729 要用Splay啊哭..强制在线.. 二叉查找树 二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree ...

  4. splay:优雅的区间暴力!

    万年不更的blog主更新啦!主要是最近实在忙,好不容易才从划水做题的时间中抽出一段时间来写这篇blog 首先声明:这篇blog写的肯定会很基础...因为身为一个蒟蒻深知在茫茫大海中找到一个自己完全能够 ...

  5. 【洛谷1486】[NOI2004] 郁闷的出纳员(Splay的小运用)

    点此看题面 大致题意: 你是一个公司的出纳员,现在有\(n\)个操作,操作有4种:新来一个员工.增加全体员工工资.减少全体员工工资.查询第\(k\)多的工资.若一个员工的工资在某一时刻低于合同上的工资 ...

  6. 伸展树(Splay tree)的基本操作与应用

    伸展树的基本操作与应用 [伸展树的基本操作] 伸展树是二叉查找树的一种改进,与二叉查找树一样,伸展树也具有有序性.即伸展树中的每一个节点 x 都满足:该节点左子树中的每一个元素都小于 x,而其右子树中 ...

  7. Play with Chain 【HDU - 3487】【Splay+TLE讲解】

    题目链接 很好的一道题,用了三天多的时间,终于知道了我为什么T的原因,也知道了在Splay的同时该怎样子的节约时间,因为Splay本身就是大常数的O(N*logN),我们如果不在各种细节上节约时间,很 ...

  8. UOJ Test Round #2

    昨天晚上打的这个比赛,简直一颗赛艇啊-- 感觉发挥的并不好.比赛的时候比较紧张,最后一题还脑残写了个离散化结果爆零了,哎我怎么这么逗逼-- 讲讲比赛经过吧. 比赛之前逗逼地以为是8:00开始,然后淡定 ...

  9. bzoj1014:[JSOI2008]火星人prefix

    思路:插入.修改操作是splay的模型,然后询问的话就可以二分答案,然后再用splay去判,关键就在于怎么去判断. 可以用字符串hash,splay每个节点维护一个hash域,然后就可以定义一个进制去 ...

随机推荐

  1. Android 使用WebView显示网页

    构建WebView就可以显示Web信息.因为我觉得这里会讲述很多方式来实现WebView,所以我决定为每一种方式创建一个对应的Activity,MainActivity通过Button可以点击进入对应 ...

  2. Android 实现动态匹配输入的内容 AutoCompleteTextView和MultiAutoCompleteTextView

    AutoCompleteTextView1.功能:动态匹配输入的内容,如百度搜索引擎当输入文本时可以根据内容显示匹配的热门信息.2.独特属性:android:completionThreshold 设 ...

  3. 程序启动-Runloop

    0 从程序启动开始到view显示: start->(加载framework,动态静态链接库,启动图片,Info.plist,pch等)->main函数->UIApplicationM ...

  4. eclipse的.properties文件中文显示问题

    eclipse的.properties文件,默认的编码方式是iso-8859-1. 所以中文显示有问题. 按照下面的方式,把Default Encoding修改成UTF-8就可以了.

  5. JSP自定义标签开发入门《转》

    JSP自定义标签开发入门 一般情况下开发jsp自定义标签需要引用以下两个包 import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; ...

  6. 【BZOJ2815】[ZJOI2012]灾难 拓扑排序+LCA

    [BZOJ2815][ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从 ...

  7. 【BZOJ1500】[NOI2005]维修数列 Splay

    [BZOJ1500][NOI2005]维修数列 Description Input 输入的第1 行包含两个数N 和M(M ≤20 000),N 表示初始时数列中数的个数,M表示要进行的操作数目.第2行 ...

  8. Java开发环境的搭建(jdk,eclipse)

    一.java 开发环境的搭建 这里主要说的是在windows 环境下怎么配置环境. 1.首先安装JDK java的sdk简称JDK ,去其官方网站下载最近的JDK即可. http://www.orac ...

  9. C#学习笔记之(Hellow,WORLD;常量和变量;键盘输入和输出;数据类型转换;计算器)

    HELLO,WORLD Console.Write 表示向控制台直接写入字符串,不进行换行,可继续接着前面的字符写入. Console.WriteLine 表示向控制台写入字符串后换行. Consol ...

  10. FPN(feature pyramid networks)

    多尺度的object detection算法:FPN(feature pyramid networks). 原来多数的object detection算法都是只采用顶层特征做预测,但我们知道低层的特征 ...