最近真的不爽。。。一道维修数列就做了我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. 【[SDOI2009]Elaxia的路线】

    魏佬告诉我跑得快不一定赢,不跌跟头才是成功 我决定把这句话作为魏佬的名言记下来 等以后人人捧着魏佬语录的时候,我可以告诉他们魏佬从小就开始向我传授人生经验 但我就是跑的快,而且非常快 成功卡到了b站最 ...

  2. win10中显示资源管理器扩展

    一年前从有两台机器win7升级到win10,一台上装了我常用的资源管理器扩展setExBar,但另一台没有.升级后原来有插件的依然默认显示插件,我在另一台机器上安装了setExBar时默认不显示.如果 ...

  3. PHP扩展模块redis安装

    PHP扩展redis模块安装 当我们安装好php之后可能会忘记装一些模块,或者需要增加模块的时候我们可以使用扩展模块安装. 查看php加载了哪些模块,使用命令 /usr/local/php/bin/p ...

  4. Notepad++格式化JSON字符串

    窗口 -> 插件 -> Plugin Manager -> Show Plugin Manager,在弹出层中找到"JSON Viewer"选项,将踏勾选上,然后 ...

  5. Java中的监听器

    servlet的技术规范包括三个:servlet,listener,filter,今天记录一下listener的学习. 监听器就是监听某个对象的状态变化的技术.监听器包括事件源,监听器,注册监听器以及 ...

  6. Web—11-手机端页面适配

    流式布局: 就是百分比布局,非固定像素,内容向两侧填充,理解成流动的布局,成为流式布局 视觉窗口: viewport是移动端持有.这是一个虚拟的区域,承载网页的. 承载关系:浏览器—->view ...

  7. oo第二次总结作业

    OO电梯作业总结 这三周的作业和课堂内容以及OS的课上内容都相同,都是关于多线程方面的知识.在这次作业中由浅入深布置了三项多线程电梯方面的作业,让我们在实践中感受了多线程的工作原理以及各项需要注意的要 ...

  8. webStorm安装以及集成git使用!

    一:安装webstorm 百度网盘地址:https://pan.baidu.com/s/1K96mg7WYHc6X3odtk7_f2g 密码:2cgd   二:破解webstorm 1:选择liste ...

  9. Windows 安装配置memcached+php的教程,以及相关资源下载

    第一步:安装 Memcached 服务 第二步:让php加载memcached.dll扩展 详情步骤如下: 第一步:安装 Memcached 服务 1.下载 Memcached  密码:jzay.压缩 ...

  10. XML中需要转义的字符

    有的数据库表的字段名,对于某些数据库来讲,是属于关键字或者保留字来处理识别的,那么这个时候,需要对这样的字段名进行转义处理,一般在执行sql 语句脚本的情况,处理办法是在这个字段名外加上双引号就可以识 ...