平衡树
文章平均质量分 75
平衡树
YB Lin
这个作者很懒,什么都没留下…
展开
-
P5217 贫穷 平衡树
传送门文章目录题意:思路:题意:思路:本来是不想写数据结构了,因为明天打蓝桥了,想放松一下,但是看到这个题感觉写起来挺简单的,就试了试,结果…首先看一下他的操作,1,2,3,51,2,3,51,2,3,5就是裸的平衡树操作,444需要用一个数组判断是否删,没有删的话再查排名即可,注意查之前需要清空所有父亲的lazylazylazy标记!!!这个非常重要。对于操作555我们状压一下,只有262626个,所以一个intintint就能存下来,直接把区间拿出来,让后查询有多少个111就好了。坑点:原创 2021-06-04 21:52:49 · 70 阅读 · 0 评论 -
P4847 银河英雄传说V2 非旋treap
传送门文章目录题意:思路:题意:思路:让我们分析一下题目需要实现什么操作:(1)(1)(1)将某个序列放到某个的后面,也就是合并两个序列。(2)(2)(2)将一个序列从某处断开。(3)(3)(3)查询某个序列的一段和。合并、分裂、查询??这不是平衡树裸题????,直接上fhq−treapfhq-treapfhq−treap,太香了。查找父亲的时候每次找fatherfatherfather的时候不断向上跳一直到根即可,最多lognlognlogn层。注意维护序列的话,找xxx所在的位置原创 2021-06-04 19:16:31 · 87 阅读 · 0 评论 -
P4146 序列终结者 平衡树 + lazy维护
传送门文章目录题意:思路:题意:思路:平衡树裸题,直接维护俩lazylazylazy就行了。需要注意的是,只有儿子节点存在的时候才能更新,不然更新到000号节点之后,给000号点加上了奇怪的值,在pushuppushuppushup的时候如果儿子不存在就拿000号节点更新答案了,所以需要特判以下。// Problem: P4146 序列终结者// Contest: Luogu// URL: https://www.luogu.com.cn/problem/P4146// Memory L原创 2021-06-03 16:35:18 · 85 阅读 · 0 评论 -
P4309 [TJOI2013]最长上升子序列 平衡树 + dp
传送门文章目录题意:思路:题意:思路:注意到一个很关键的条件,每次插入iii,而iii是递增的,也就是说插入iii之后只会从前面的最大值转移过来,所以我们现在只需要维护插入操作即可,这个显然可以用平衡树来维护。让后就是一个裸的fhq−treapfhq-treapfhq−treap了,我们需要维护一个dpdpdp数组,dp[i]dp[i]dp[i]表示以iii个数结尾的最长上升子序列,对于平衡树中的每个节点都维护一个他的位置pospospos,当pushuppushuppushup的时候max(d原创 2021-06-03 15:39:11 · 125 阅读 · 0 评论 -
P2596 [ZJOI2006]书架 无旋treap 按照排名分裂
传送门文章目录题意:思路:题意:实现如下操作:思路:fhq-treap板子辣,不要被他的编号误导了,我们还是需要按照排名来分裂,从上到下标号1−n1-n1−n即可,注意在按照排名分裂的时候findrankfindrankfindrank函数与按照权值分裂是不同的,因为他不满足二叉树的性质,那么怎么得到排名呢?可以发现其中序遍历在他前面遍历的个数+1+1+1就是他的排名,所以我们往上暴跳记录一下有多少在他前面就好了,复杂度O(logn)O(logn)O(logn)。其他的都是一些基本操作了,代码原创 2021-05-21 10:59:15 · 83 阅读 · 0 评论 -
P3391 【模板】文艺平衡树 fhq-treap 模板
传送门文章目录题意:思路:题意:思路:这是学splaysplaysplay的时候的一个模板题,之前学过fhq−treapfhq-treapfhq−treap,但是没怎么用他做过题,今天一做还发现不少问题,真是眼高手低了。众嗦粥汁,fhq−treapfhq-treapfhq−treap一个很重要的函数就是splitsplitsplit,他算是一个核心函数了,其分裂方式有两种:按照权值分裂以及按照排名分裂。按照权值分裂比较容易理解,按照排名分的话拿就可以这个题当例子,这个题要求翻转[l,r][l,原创 2021-05-20 08:16:20 · 108 阅读 · 0 评论 -
nowcoder Forsaken的数列 fhq-treap
传送门文章目录题意:思路:题意:思路:很明显的数据结构了,splaysplaysplay当然能写,但是fhq−treapfhq-treapfhq−treap更加简洁易懂。考虑第一个操作,无非就是分裂出[1,pos−1][1,pos-1][1,pos−1]与[pos,n][pos,n][pos,n],让后再新建一个节点nownownow,将[1,pos−1],now,[pos,n][1,pos-1],now,[pos,n][1,pos−1],now,[pos,n]合并起来就好了。第二个操作分裂原创 2021-05-20 09:20:58 · 103 阅读 · 0 评论