随笔分类 - 数据结构
摘要:传送门 当然有 的做法:主席树等等。 但是这题还可以用一种更暴力的方法:直接开线段树,每个结点保存的信息是对应区间的所有数从小到大排序后的结果。 pushup 就是对左右儿子归并排序。 查询就在数组上二分即可。 时间复杂度 ,空间复杂度 \
阅读全文
摘要:传送门 很巧妙的转化。 给每个结点染色(标号),如果一条边两端同色,是重边;否则为轻边。 初始让每个结点分别设一个超级大的颜色。 每次修改,等价于把路径上的点修改为一个没有出现过的颜色。 用树剖维护即可。
阅读全文
摘要:传送门 平衡树优化神题,完全想不到平衡树能这么用! 一看这题散发着一股 DP 的清香。 表示前 个数且第 个数为 的最长上升子序列长度。但是转移方程不好优化,状态表示可以滚动数组压掉一维。 反方向考虑 DP: 表示
阅读全文
摘要:左偏树是一种可并堆(一系列的堆),支持以下操作: 删除一个堆的最值。 查询一个堆的最值。 新建一个堆,只包含一个元素。 合并两个堆。这个复杂度是 的。 左偏树是一颗二叉树。定义 “外结点” 为儿子数量不等于 的结点,定义每个结点的 为该结点到最近
阅读全文
摘要:传送门 注意题目保证新加入的区间长度一定最大,想一想,这是保证了新区间不会被包含。 区间关系有三种:如果两个区间相交,则两个区间互相可达;如果是包含关系,小的能到大的;如果相离,都不能到。 显然当区间 与 相互可达, 与 相互可达,则
阅读全文
摘要:A 最大值 - 最小值 B 题意:在 的方阵中选择若干个方块,使得至少有 条对角线上有选择的方块。 观察:如果选择第一行的 个,和最后一行的中间 个,可以覆盖 条对角线,这其中每一个格子都恰好覆盖两条对角线。 所以
阅读全文
摘要:忘记打了,VP 了一把,前五题都是板子。 F 题意:坐标系上给定一个整点 ,求另一个整点 ,满足 组成的三角形面积为 (或说明无解)。 题解:由这三个点组成的三角形面积为 \(\dfrac{|ay-bx|}{2
阅读全文
摘要:比赛 理理思维 第一反应居然是分块而不是线段树? 线段树解法:因为只有 ,所以每个节点开一个桶完全可以,操作一二不提,操作三只需要多次查询,然后多次赋值即可。 分块解法:操作一不提,操作二懒标记,操作三枚举 字母算 ,然后桶排(可以用操作一)。同时做一点优化:
阅读全文
摘要:【倍增算法】 先来介绍一些倍增。 倍增是用来加速枚举过程的算法。 一般可以把算法变成 级别 。 举个栗子。 这里有一个小人,他想去右边的目标,但是他并不知道这个目标有多远。 不过他知道目前自己是在终点的左边还是右边。 我们说,他可以一步一步走,
阅读全文
摘要:【最小生成树是什么】 在一张图 (设 个结点)中,选取 条边,用这些边把结点之间连通。 那么这 条边和原来的结点所构成的图 ,就叫做 的生成树。 最小生成树,就是希望 中边权的和最小。 而求最小生成树,有两种比较
阅读全文
摘要:【并查集是什么】 并查集是用来表示一些不相交集合的算法。 它可以很快地处理两个点之间是否在一个连通块中。 【并查集的特点】 动态合并集合; 合并之后就不能拆开了。 并查集开始前,先按顺序把初始集合编号。 (初始也不一定每个都是单个元素) 【并查集的实现】 数据结构分类:抽象结构、存储结构。 抽象结构
阅读全文
摘要:【Trie 树】 我们试图给每一个字符串一个对应的值。但是由于字符串长度不定,也不是数字,所以不能用数组。 有几种办法: STL map,二叉排序树(平衡树), 。 为字符串长度。 Trie,插入删除查询都是 的。但是
阅读全文
摘要:【什么是虚树】 OI-wiki 如果题目里有一些关键点,而整棵树规模过大,我们可以考虑使用虚树来重新建树,以减少树的规模。 虚树:一颗树,树中包含所有关键点,以及任意多个关键点的 LCA。 可以发现在这颗虚树中,任意两个关键点的 LCA 都不变(还是对应原树的结点),并且只要我们把虚树中每条边的距离
阅读全文
摘要:这是一种线段树的高级玩法:在时间轴上运用。每个时间节点作为一个叶子,在一个时间区间内的标记,就可以影响到这个区间内的所有时刻。 题目传送门 建立一颗基于询问的线段树,也就是说线段树的每个结点都代表区间内的一些询问。 因为删除操作不好搞,我们反向考虑,求每个询问存在哪些边。 我们可以对每条边,求出它是
阅读全文
摘要:可并堆:一种支持插入、删除、修改、删除任意一个元素、求 还有合并的数据结构。 下面的只讲可并堆中的一种:左偏树。 左偏树是二叉树,但并不是完全二叉树。它满足两个性质:① 每个结点的权值都小于等于儿子。② 每个结点 , 分别是
阅读全文