随笔分类 -  数据结构

摘要:传送门 当然有 O(nlogn) 的做法:主席树等等。 但是这题还可以用一种更暴力的方法:直接开线段树,每个结点保存的信息是对应区间的所有数从小到大排序后的结果。 pushup 就是对左右儿子归并排序。 查询就在数组上二分即可。 时间复杂度 O(nlog2n),空间复杂度 \ 阅读全文
posted @ 2024-03-12 18:23 FLY_lai 阅读(26) 评论(0) 推荐(0) 编辑
摘要:传送门 很巧妙的转化。 给每个结点染色(标号),如果一条边两端同色,是重边;否则为轻边。 初始让每个结点分别设一个超级大的颜色。 每次修改,等价于把路径上的点修改为一个没有出现过的颜色。 用树剖维护即可。 阅读全文
posted @ 2024-03-11 18:20 FLY_lai 阅读(5) 评论(0) 推荐(0) 编辑
摘要:传送门 平衡树优化神题,完全想不到平衡树能这么用! 一看这题散发着一股 DP 的清香。 dp[i][j] 表示前 i 个数且第 i 个数为 j 的最长上升子序列长度。但是转移方程不好优化,状态表示可以滚动数组压掉一维。 反方向考虑 DP:dp[i][j] 表示 阅读全文
posted @ 2024-03-02 16:57 FLY_lai 阅读(15) 评论(0) 推荐(0) 编辑
摘要:T4 写出转移方程:fi 表示前 i 天且第 i 天必须跑的最大能量值。gi=maxj=1i{fj}。初值 f0=g0=0。 对于转移方程,考虑枚举最后一段跑的段是从哪里开始的:\(f_i=\displaystyle\ma 阅读全文
posted @ 2024-03-02 16:52 FLY_lai 阅读(37) 评论(0) 推荐(0) 编辑
摘要:左偏树是一种可并堆(一系列的堆),支持以下操作: 删除一个堆的最值。 查询一个堆的最值。 新建一个堆,只包含一个元素。 合并两个堆。这个复杂度是 O(log) 的。 左偏树是一颗二叉树。定义 “外结点” 为儿子数量不等于 2 的结点,定义每个结点的 dist 为该结点到最近 阅读全文
posted @ 2024-02-24 17:16 FLY_lai 阅读(6) 评论(0) 推荐(0) 编辑
摘要:【根号分治】 例题:等差数列加 给定一个长度 n 的数列,初始全都是 0。(n2×105) 要求支持两种操作: 1xyd,表示把所有下标模 x 等于 y 的位置全部加上 d2x,表示查询 \(a_x\ 阅读全文
posted @ 2024-02-19 11:01 FLY_lai 阅读(26) 评论(0) 推荐(0) 编辑
摘要:传送门 注意题目保证新加入的区间长度一定最大,想一想,这是保证了新区间不会被包含。 区间关系有三种:如果两个区间相交,则两个区间互相可达;如果是包含关系,小的能到大的;如果相离,都不能到。 显然当区间 ab 相互可达,bc 相互可达,则 a,b,c 阅读全文
posted @ 2024-02-19 10:59 FLY_lai 阅读(18) 评论(0) 推荐(0) 编辑
摘要:传送门 题意简述:给定序列 a,bm 次查询,每次询问 i=lirij=iri(maxk=ijak×maxk=ijbk)。 \(n,m\le 2.5\times 阅读全文
posted @ 2024-02-19 10:56 FLY_lai 阅读(9) 评论(0) 推荐(0) 编辑
摘要:A 最大值 - 最小值 B 题意:在 n×n 的方阵中选择若干个方块,使得至少有 k 条对角线上有选择的方块。 观察:如果选择第一行的 n 个,和最后一行的中间 n2 个,可以覆盖 4n4 条对角线,这其中每一个格子都恰好覆盖两条对角线。 所以 阅读全文
posted @ 2024-02-16 11:38 FLY_lai 阅读(9) 评论(0) 推荐(0) 编辑
摘要:【前置知识】 运算律,单位元。 运算律基本就是交换律、结合律、分配律。 单位元: 假设我们现在有一个运算 。 如果 ab=ba=a,称 b 是运算 的单位元。 【线段树】 线段树是一个树形数 阅读全文
posted @ 2024-02-15 11:10 FLY_lai 阅读(22) 评论(0) 推荐(0) 编辑
摘要:忘记打了,VP 了一把,前五题都是板子。 F 题意:坐标系上给定一个整点 (x,y),求另一个整点 (a,b),满足 (0,0),(x,y),(a,b) 组成的三角形面积为 1(或说明无解)。 题解:由这三个点组成的三角形面积为 \(\dfrac{|ay-bx|}{2 阅读全文
posted @ 2024-02-14 10:08 FLY_lai 阅读(12) 评论(0) 推荐(0) 编辑
摘要:比赛 理理思维 第一反应居然是分块而不是线段树? 线段树解法:因为只有 26,所以每个节点开一个桶完全可以,操作一二不提,操作三只需要多次查询,然后多次赋值即可。 分块解法:操作一不提,操作二懒标记,操作三枚举 26 字母算 cnt,然后桶排(可以用操作一)。同时做一点优化: 阅读全文
posted @ 2024-02-06 08:54 FLY_lai 阅读(20) 评论(0) 推荐(0) 编辑
摘要:【树状数组是什么】 树状数组(Binary Indexed Tree, BIT) 支持单个元素修改 和 前缀查询。 比较一下: 子段和 修改单个元素 数组 O(n) O(1) 前缀和 O(1) O(n) 树状数组 O(logn) O(logn) 阅读全文
posted @ 2024-02-05 14:35 FLY_lai 阅读(7) 评论(0) 推荐(0) 编辑
摘要:【倍增算法】 先来介绍一些倍增。 倍增是用来加速枚举过程的算法。 一般可以把算法变成 log 级别 O(n)=>O(logn)。 举个栗子。 这里有一个小人,他想去右边的目标,但是他并不知道这个目标有多远。 不过他知道目前自己是在终点的左边还是右边。 我们说,他可以一步一步走, 阅读全文
posted @ 2024-02-05 14:31 FLY_lai 阅读(30) 评论(0) 推荐(0) 编辑
摘要:【最小生成树是什么】 在一张图 G(设 n 个结点)中,选取 n1 条边,用这些边把结点之间连通。 那么这 n1 条边和原来的结点所构成的图 S,就叫做 G 的生成树。 最小生成树,就是希望 S 中边权的和最小。 而求最小生成树,有两种比较 阅读全文
posted @ 2024-02-05 14:30 FLY_lai 阅读(19) 评论(0) 推荐(0) 编辑
摘要:【并查集是什么】 并查集是用来表示一些不相交集合的算法。 它可以很快地处理两个点之间是否在一个连通块中。 【并查集的特点】 动态合并集合; 合并之后就不能拆开了。 并查集开始前,先按顺序把初始集合编号。 (初始也不一定每个都是单个元素) 【并查集的实现】 数据结构分类:抽象结构、存储结构。 抽象结构 阅读全文
posted @ 2024-02-05 14:27 FLY_lai 阅读(35) 评论(0) 推荐(0) 编辑
摘要:【Trie 树】 我们试图给每一个字符串一个对应的值。但是由于字符串长度不定,也不是数字,所以不能用数组。 有几种办法: STL map,二叉排序树(平衡树),O(log(n)len)len 为字符串长度。 Trie,插入删除查询都是 O(len) 的。但是 阅读全文
posted @ 2024-02-01 09:49 FLY_lai 阅读(14) 评论(0) 推荐(0) 编辑
摘要:【什么是虚树】 OI-wiki 如果题目里有一些关键点,而整棵树规模过大,我们可以考虑使用虚树来重新建树,以减少树的规模。 虚树:一颗树,树中包含所有关键点,以及任意多个关键点的 LCA。 可以发现在这颗虚树中,任意两个关键点的 LCA 都不变(还是对应原树的结点),并且只要我们把虚树中每条边的距离 阅读全文
posted @ 2024-02-01 09:44 FLY_lai 阅读(17) 评论(0) 推荐(0) 编辑
摘要:这是一种线段树的高级玩法:在时间轴上运用。每个时间节点作为一个叶子,在一个时间区间内的标记,就可以影响到这个区间内的所有时刻。 题目传送门 建立一颗基于询问的线段树,也就是说线段树的每个结点都代表区间内的一些询问。 因为删除操作不好搞,我们反向考虑,求每个询问存在哪些边。 我们可以对每条边,求出它是 阅读全文
posted @ 2024-02-01 09:41 FLY_lai 阅读(6) 评论(0) 推荐(0) 编辑
摘要:可并堆:一种支持插入、删除、修改、删除任意一个元素、求 min 还有合并的数据结构。 下面的只讲可并堆中的一种:左偏树。 左偏树是二叉树,但并不是完全二叉树。它满足两个性质:① 每个结点的权值都小于等于儿子。② 每个结点 dist(L)dist(R)L,R 分别是 阅读全文
posted @ 2024-02-01 09:39 FLY_lai 阅读(17) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示