随笔分类 - 数据结构——平衡树
摘要:比赛链接 A.ball problem 有n条轨道,在这些纵道之间有m条横道,当有球从某个轨道经过时,如果路过了一个横道,那么这个球就会通过横道到达相邻的一个纵道。 先放入m个横道,然后每次拿走一个。然后会有一些询问,询问当前从第i个轨道放下球最终会滚到哪个位置。 solution 用$a_i$表示
阅读全文
摘要:比赛链接 A.SAM 挖坑 B.T1 problem 给出一个字符串$S$,$S$只包含阿拉伯数字,问$S$有多少个回文子串$S[i,j]$构成了不含前导零的能被三整除的整数。 \(|S|\le 4\times 10^6\) solution 题面不给数据范围真** 先用$manacher$求出来所
阅读全文
摘要:题目链接 思路 用一个平衡树维护点的编号和权值。这里的权值是自己赋上去的。 操作1,就把x从平衡树中删掉,然后将其权值变为最小值,重新插入。 操作2,与操作1类似,只要将其权值变为最大值再重新插入就行了。 操作3,其实就是将x与他的前驱或者后继交换。也很容易实现。 操作4,查询排名。 操作5,查找第
阅读全文
摘要:简介 $fhq\_treap$是一种非旋平衡树。在学习这篇文章之前,还是先学习一下普通$treap$吧 优点 相比于普通的$treap$,它可以处理区间操作。 相比于$splay$,它简洁易懂,代码也较短。 缺点 要比$splay$和$treap$慢 基础操作 $fhq\_treap$最基本的两个操
阅读全文
摘要:题目链接 思路 set+map+优先队列就可以水过去。可以发现,每插入一个元素,都会使得操作2中原来相邻的那个差值消失,然后多了两个新的差值。对于新的差值,只要直接扔到优先队列里就好了。那么删除呢。可以用map记录一下当前元素被删除了多少次。然后查询的时候将被删除的跳过即可。对于操作3,只要将插入的
阅读全文
摘要:题目链接 思路 splay区间操作的裸题。 假如要对l r这段区间操作,那么就先把l 1伸展到根节点,然后把r +1伸展为根的儿子。这样r + 1的左儿子就是要操作的区间了。只要在上面打上标记,以后每次查询的时候pushdown一下。 然后对于l 1和r+1节点可能不存在,所以可以放两个标兵元素。就
阅读全文
摘要:胡扯 因为先学习的treap,而splay与treap中有许多共性,所以会有很多地方不会讲的很细致。关于treap和平衡树可以参考这篇博客 关于splay splay,又叫伸展树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由Daniel Sleator和Robert Ta
阅读全文
摘要:题目链接 思路 因为这些数字是从小到大加进去的,所以以当前数字结尾的最长上升子序列可以从前面位置的任何一个数字转移过来。所以只要能知道每个数字最终位于哪个位置就行了。 没想到出了treap还有什么办法求出来这个序列。看了眼题解发现用vector的insert直接模拟就能过。~~(纳尼?)~~这个函数
阅读全文
摘要:题目链接 思路 首先可以证明当这个高度是中位数的时候耗费时间是最少了。所以可以$n^2log(n)$用一个treap预处理出每个区间的中位数。 然后就是知道了中位数怎么计算答案的问题。 然后发现暴力n m的扫能过~~而且跑的还不慢~~ 但是~~作为一个正直善良的OIER~~我还是用$n^2log(n
阅读全文
摘要:题目链接 思路 这个题其实就是对于treap中的删除操作进行一些修改。自己yy了一种做法。就是在删除的时候,如果要删除的数比这棵子树的根大,那么就把根变成根的右孩子,这样就相当于删除了整棵左子树和根节点。然后重新维护一下siz,并且维护一下平衡性就行了。 竟然把rotate函数写错了。调了30min
阅读全文
摘要:题目链接 思路 比较裸的一道平衡树的题。用一个变量S来表示当前树的情况,当S为负数时树内为宠物,当S为正数时树内为人。然后每次分情况讨论一下。如果树为空或者是与来的东西(人或宠物)与树内存的相同。那么就无法领养,直接将这个东西扔到树里。否则就从树里面找一个与当前值最接近的数字,然后统计进答案。 一开
阅读全文
摘要:题目链接 思路 将哪些村庄已经被摧毁了放到treap里。查询的时候如果当前村庄已经被毁了,那么就可以直接输出0.不然就输出这个村庄的后继 前驱 1。原因显然 代码 一言 谁看见过风?我和你,都不曾看见过。
阅读全文
摘要:题目链接 思路 模板 只是有几个容易出错的地方 第45行容易忘记 第54行里面的cnt 和siz 容易忘记 第56行是根据id判断不是val 第60行siz 容易忘记 第64行是siz+1不是siz+cnt 第77行和82行等于的情况容易忽略 代码 一言 记忆或会消失,但我的心会记着承诺。
阅读全文
摘要:平衡树 平衡树就是一种可以在log的时间复杂度内完成数据的插入,删除,查找第k大,查询排名,查询前驱后继以及其他许多操作的数据结构。 Treap treap是一种比较好写,常数比较小,可以实现平衡树基本操作的一种平衡树。treap的平衡是基于随机化。是将堆与二叉查找树结合起来所得到的数据结构。 tr
阅读全文