随笔分类 -  学习笔记

学习的笔记
摘要:一.普通线段树 线段树(Segment Tree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现 \(O(logn)\) 的区间修改,还可以同时支持多种操作(加、乘),更具通用性。 接下来我们用这道模板题为例,看看线段树是怎么维护区间和这一信息 阅读全文
posted @ 2023-10-15 10:03 Aurora-JC 阅读(173) 评论(0) 推荐(0)
摘要:1.算法简介 网络 一个网络 \(G = (V,E)\) 是一张有向图,图中每条有向边 \((x,y) \in E\) 都有一个给定的权值 \(c(x,y)\) ,称为边的的容量。特别的,若 \((x,y) \notin E\), 则 \(c(x,y) = 0\)。图中还有两个指定的特殊节点 \(S 阅读全文
posted @ 2023-10-15 10:02 Aurora-JC 阅读(126) 评论(0) 推荐(0)
摘要:Treap Splay 无旋Treap——fhq treap 简介 就是没有旋转操作的 Treap,一些性质什么的都跟 Treap 类似。 算法介绍 (1)merge(x,y) 将两棵“有序”(x中元素的权值最大值小于 y 中元素权值最小值)的Treap合并成一棵。 int ch[N][2], sz 阅读全文
posted @ 2023-10-06 22:32 Aurora-JC 阅读(63) 评论(0) 推荐(0)
摘要:介绍 一维前缀和 : $ s[i] = s[i - 1] + a[i] $ 二维前缀和: $s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] $ 当然也可以这么写: for(int i = 1; i <= n; i++) for(int j 阅读全文
posted @ 2023-10-04 14:41 Aurora-JC 阅读(808) 评论(1) 推荐(0)
摘要:定义与性质 笛卡尔树是一种二叉树,每一个结点由一个键值二元组 \((k,w)\) 构成。要求 \(k\) 满足二叉搜索树的性质,而 \(w\) 满足堆的性质。 ,也就是说,对于一个节点 \(i\) 的左儿子 \(l_i\) 和右儿子 \(r_i\),一定满足 \(l_i<i<r_i\)(下标 \(k 阅读全文
posted @ 2023-09-25 21:04 Aurora-JC 阅读(143) 评论(0) 推荐(0)
摘要:首先,严格地讲,基环树不是树,它是一张有 \(n\) 个节点、\(n\) 条边的图。 介绍 无向图上的基环树 有向图上的基环树 内向树 出度为 1 外向树 入度为 1 流程 找到唯一的环; 对环之外的部分按照若干棵树处理; 考虑与环一起计算。 找环 从任意一点开始搜索; 每次拓展到的点涂为灰色,回溯 阅读全文
posted @ 2023-09-21 20:13 Aurora-JC 阅读(206) 评论(0) 推荐(0)
摘要:1.算法简介 整体 DP 就是用线段树合并维护 DP。 有一些问题,通常见于二维的DP,有一维记录当前x的信息,但是这一维过大无法开下,O(nm) 也无法通过。 但是如果发现,对于 x,在第二维的一些区间内,取值都是相同的,并且这样的区间是有限个,就可以批量处理。 所以我们就可以用线段树来维护 DP 阅读全文
posted @ 2023-09-19 21:43 Aurora-JC 阅读(256) 评论(0) 推荐(0)
摘要:cdq 分治 基本思想 我们要解决一系列问题,这些问题一般包含修改和查询操作,可以把这些问题排成一个序列,用一个区间[L,R]表示。 分。递归处理左边区间 \([L,M]\) 和右边区间 \([M+1,R]\) 的问题。 治。合并两个子问题,同时考虑到 \([L,M]\) 内的修改对 \([M+1, 阅读全文
posted @ 2023-09-15 21:59 Aurora-JC 阅读(153) 评论(0) 推荐(0)
摘要:可持久化线段树(主席树) 主席树,一个数据结构,能访问到历史版本的数据,常用于可持久化和区间k大值,是线段树的一个升级版。 可持久化的意思是可以访问任意版本的数据,一眼想到的暴力做法就是开n个数组来记录,这显然是不可取的。 那么我们考虑优化。若只有单点修改,不难发现每两个版本的差别最多为1,那么我们 阅读全文
posted @ 2023-09-10 15:11 Aurora-JC 阅读(79) 评论(0) 推荐(0)
摘要:虚树常常被使用在树形dp中,当一次询问仅仅涉及到整颗树中少量结点时,为每次询问都对整棵树进行dp在时间上是不可接受的。此时,我们建立一颗仅仅包含部分关键结点的虚树,将非关键点构成的链简化成边或是剪去,在虚树上进行dp。 虚树包含所有的询问点及它们之间的lca。显然虚树的叶子节点必然是询问点,因此对于 阅读全文
posted @ 2023-09-04 20:05 Aurora-JC 阅读(57) 评论(0) 推荐(0)
摘要:## Prufer 序列 Prufer 序列可以将一个带标号 $n$ 个节点的树用 $[1,n]$ 中的 $n-2$ 个整数表示,即 $n$ 个点的完全图的生成树与长度为 $n-2$ 值域为 $[1,n]$ 的数列构成的双射。 Prufer 序列可以方便的解决一类树相关的计数问题,比如凯莱定理:$n 阅读全文
posted @ 2023-09-03 15:23 Aurora-JC 阅读(127) 评论(0) 推荐(0)
摘要:动态 DP 简称 DDP(Dynamic Dynamic Programming),其本质是用 矩阵 维护带修改的动态规划问题。 # 1.算法介绍:树链剖分写法 ## 模板:[P4719 【模板】"动态 DP"&动态树分治](P4719) > 给定一棵 $n$ 个点的树。$i$ 号点的点权为 $a_ 阅读全文
posted @ 2023-08-31 22:06 Aurora-JC 阅读(78) 评论(0) 推荐(0)
摘要:点分治就是把分治搬到了树上,其核心思想仍然是分治:将问题经过处理后,转化为同类型的,规模更小的问题求解。 # 静态点分治 ## Ⅰ.[P3806 【模板】点分治1 ](https://www.luogu.com.cn/problem/P3806) 题意:给定一棵带权无根树,问是否有点对的距离为 $k 阅读全文
posted @ 2023-08-31 21:28 Aurora-JC 阅读(81) 评论(0) 推荐(0)
摘要:# 块状链表(尚未完善) 对于线性表,可以 $O(1)$ 的访问,但是插入和删除操作是 $O(n)$ 对于链表,可以 $O(1)$ 的进行插入和删除,但是是 $O(n)$ 的访问。 于是本着分块的思想,有了块状链表 。 大概长这个样子。每个块的大小数量级在 $O(\sqrt{n})$ , 块数的量级 阅读全文
posted @ 2023-08-19 22:29 Aurora-JC 阅读(160) 评论(0) 推荐(0)
摘要:本文主要讲述这三种常见距离算法 :欧氏距离,曼哈顿距离,切比雪夫距离 。 ## 1.欧氏距离 **欧氏距离** 是最易于理解的一种距离算法。在数学的平面直角坐标系中,设点 $A,B$ 的坐标分别为 $A(x_1,y_1),B(x_2,y_2)$,求点 $A,B$ 之间的距离,我们一般会使用如下公式: 阅读全文
posted @ 2023-08-19 22:18 Aurora-JC 阅读(307) 评论(0) 推荐(0)
摘要:# 启发式合并 启发式合并核心思想就一句话:把小集合的合并到大的里。 启发式合并思想可以放到很多数据结构里,链表、线段树、甚至平衡树都可以。 考虑时间复杂度,设总共有 $n$ 个元素,由于每次集合的大小至少翻倍,所以至多会合并 $logn$ 次,总的复杂度就是 $O(nlogn)$ 的(结合线段树合 阅读全文
posted @ 2023-08-15 16:29 Aurora-JC 阅读(93) 评论(0) 推荐(0)
摘要:# 概率 ## 1.基本概念 ![](https://img2023.cnblogs.com/blog/2751294/202306/2751294-20230607142537450-1609687656.png) ![](https://img2023.cnblogs.com/blog/2751 阅读全文
posted @ 2023-06-07 16:27 Aurora-JC 阅读(67) 评论(0) 推荐(1)
摘要:# 长链剖分 ## 1.算法简介与性质 长链剖分本质上就是另外一种链剖分方式。 长链剖分与重链剖分有相通之处,后者是将 子树大小 最大的儿子作为重儿子,前者则是将 子树深度 最大的儿子作为重儿子。可见两者只是换了一个剖分形式。 长链剖分有如下性质: * 性质 1:每个节点所在长链末端为其子树内最深节 阅读全文
posted @ 2023-06-04 15:44 Aurora-JC 阅读(362) 评论(0) 推荐(1)
摘要:1.【最大公约数(GCD)和最小公倍数(LCM)】 【基本性质、定理】 \(\large gcd(a,b)=gcd(b,a−b) (a>b)\) \(\large gcd(a,b)=gcd(b,a\) \(\large mod\) \(b)\) \(\large gcd(a,b)\) \(\larg 阅读全文
posted @ 2023-06-04 15:39 Aurora-JC 阅读(201) 评论(0) 推荐(0)
摘要:会持续更新的。 # bitset C++ 的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用 1 bit空间。 bitset的原理大概是将很多数压成一个,从而节省空间和时间, 一般来说bitset会让你的算法复杂度 /32 ## 构造 bi 阅读全文
posted @ 2023-06-02 15:01 Aurora-JC 阅读(340) 评论(0) 推荐(0)