最近真的不爽。。。一道维修数列就做了我1上午+下午1h+1晚上+晚上1h+上午2h。。。

一道不错的自虐题。。。

由于这一片主要讲思想,代码我放这里

不会无旋treap的童鞋可以进这里

呵呵。。。

下面来切开这道题

1、建立一个treap

肯定不能做n次merge吧。。。虽然我看见有人这样写过了,但我毕竟自带巨大常数

这里可以这么做

用一个栈来维护新建treap最右边的一条链(右下角是栈顶),从左到右依次加点,每次只需将这个点的rand与栈顶的rand比较一下,如果栈顶的rand比要加的当前点的rand大,就一直退栈(小根堆),然后把这个点设为栈顶的右儿子,把最后一次退栈的的点设为当前点的左儿子。(当前点即为要加的点)

入栈完成后,将所有点退栈。最后一次退栈的即为根。

每个点退栈前要reset(其他文章的updata)

然后就建好了一个treap。。。

2、插入操作

很容易。。。merge n次,肯定是对的,但不保证不会T。。。

这和建树差不多。。。所以可以先建一棵树,然后与原树合并

3、删除操作

额,和单点差不多,把要删除部分分离出来再merge剩下部分。。。

4、修改操作

像线段树一样维护一个标记,当要修改(即merge或split)时更新数值并下传标记

5、翻转操作

像线段树一样维护一个标记,当要修改时交换左右儿子并下传标记

6、求和操作

每个节点维护一个sum,每次更新时更新sum,sum=data+ls.data+rs.data

7、求最大子序列操作

有点麻烦。。。不过还是可以做

每个点维护三个:最大前缀,最大后缀,和最大子序列

转移方程:

lmax=max(ls.lmax,ls.sum+data+max(rs.lmax,0))
rmax=max(rs.rmax,rs.sum+data+max(ls.lmax,0))

maxx=max(ls.maxx,r.maxx,data+max(ls.maxx,0)+max(rs.maxx,0))

这个转移方程正确性显而易见。

还有就是修改操作时,要修改这个标记,如果修改的数是正数,修改成size*data,否则修改成data(必须选一个。。。)

还有反转时交换lmax,rmax

8、关于空间

我是非指针党,空间肯定炸,所以我弄了个栈,里面装没用的空间,当建树时弹栈再用。。。当删除时回收,全部重新入栈

然后就解决了这道题。

补充:

1、updata时必须先让左右儿子下传标记

2、随机数不能重复!!!

3、指针版

无旋treap的区间操作实现的更多相关文章

  1. [转载]无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )

    转自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182631.html 1500: [NOI2005]维修数列 Time Limit: 10 Sec  Mem ...

  2. [您有新的未分配科技点] 无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )

    1500: [NOI2005]维修数列 Time Limit: 10 Sec  Memory Limit: 64 MB Description Input 输入的第1 行包含两个数N 和M(M ≤20 ...

  3. 【序列操作V】平衡树(无旋treap)

    题目描述 维护一个队列,初始为空.依次加入 n(1≤n≤105)个数 ai(-109≤ai≤109),第 i(1≤i≤n)个数加入到当前序列第 bi(0≤bi≤当前序列长度)个数后面.输出最终队列. ...

  4. [转载]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    转载自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182491.html 今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和t ...

  5. [您有新的未分配科技点]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和treap一样简单易懂,同时还支持可持久化. 无旋treap的节点定义和treap一样,都要同时满足树性质和堆性质,我 ...

  6. 【算法学习】Fhq-Treap(无旋Treap)

    Treap——大名鼎鼎的随机二叉查找树,以优异的性能和简单的实现在OIer们中广泛流传. 这篇blog介绍一种不需要旋转操作来维护的Treap,即无旋Treap,也称Fhq-Treap. 它的巧妙之处 ...

  7. [BZOJ3223]文艺平衡树 无旋Treap

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...

  8. 无旋Treap - BZOJ1014火星人 & 可持久化版文艺平衡树

    !前置技能&概念! 二叉搜索树 一棵二叉树,对于任意子树,满足左子树中的任意节点对应元素小于根的对应元素,右子树中的任意节点对应元素大于根对应元素.换言之,就是满足中序遍历为依次访问节点对应元 ...

  9. 无旋treap大法好

    无旋Treap大法好 原理? 是一棵二叉查找树: 一个节点左子树权值都比他小,右子树权值都比他大 所以可以维护序列(以位置为权值),或数值(以数值为权值) 是一个堆: 每个节点除了上述提到的权值外,还 ...

随机推荐

  1. docker-7-常用软件的安装

    1.总体步骤 搜索镜像 拉取镜像 查看镜像 启动镜像 停止容器 移除容器 2.安装tomcat docker hub上面查找tomcat镜像:docker search tomcat     从doc ...

  2. 让PHP更快的提供文件下载

    一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件. 但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作. 于是, 很多时候, 我们 ...

  3. PHP异步:在PHP中使用 fsockopen curl 实现类似异步处理的功能

    PHP从主流来看,是一门面向过程的语言,它的最大缺点就是无法实现多线程管理,其程序的执行都是从头到尾,按照逻辑一路执行下来,不可能出现分支,这一点是限制php在主流程序语言中往更高级的语言发展的原因之 ...

  4. python学习day25 正则表达式

    4.30-25 正则表达式与re模块 re模块本身是用来操作正则表达式,与正则本身没有关系 正则表达式是指一规则,匹配字符串的规则 1.正则表达式regex 正则表达式regex是指一规则,匹配字符串 ...

  5. SpringBoot实战(十三)之缓存

    什么是缓存? 引用下百度百科的解释: 缓存就是数据交换的缓冲区(又称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,找到了则直接执行,找不到的话则从内存中查找.由于缓存的运行速度 ...

  6. postman请求失败

    注意右上角 我点亮了左边的图标,导致任何请求都没法获取到结果,后来知道是右上角的问题,然后就可以成功请求了

  7. python 装饰器 传递参数简单案例

    def debug(func): def wrapper(*args, **kwargs): # 指定宇宙无敌参数 print "[DEBUG]: enter {}()".form ...

  8. VPP(Vector Packet Processing)配置工具

    前言 VPP提供了一个配置工具,让用户可以简单快捷地配置VPP.用户可以通过一些简单的命令配置VPP,功能包括安装及一些基本配置和测试用例. 使用 先安装一个python的pip模块,使用pip安装V ...

  9. java基础——回文数判断

    /** * 题目描述: * 有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字.编写一个函数,判断某数字是否是回文数字. * 要求实现方法: * ...

  10. Oracle日志文件

    转载网站:Oracle技术圈 转载地址:https://www.oraclejsq.com/oraclegl/010300678.html Oracle日志文件 Oracle日志文件是Oracle数据 ...