- 博客(877)
- 资源 (19)
- 收藏
- 关注
原创 AcWing 2521:数颜色 ← 带修改的莫队算法
● 在带修改的莫队算法中,一个查询通常表示为 (L,R,t),含义为在查询区间 [L,R] 前进行了 t 次修改操作。一般地,可以把 t 理解为“时间”。t 的范围为 1≤t≤m,m为操作(查询、修改)次数。两个查询的 t 相差越小,它们对应的数据差别越小,计算量也越小。所以,对 t 排序能减少计算量。
2024-05-19 22:12:47 836
原创 AcWing 2492:HH的项链 ← 基础莫队算法
● 莫队算法的精髓在于奇偶性排序。也就是依据左端点 L 位于奇数块还是偶数块,决定右端点 R 从小到大排序还是从大到小排序。(1)首先,利用分块算法将给定的 n 个数分成 sqrt(n) 个块;(2)然后,将多个询问的左端点 L 按块从小到大排序。若 L 位于奇数块,则对右端点 R 从小到大排序。若 L 位于偶数块,则对右端点 R 从大到小排序。反之亦可。
2024-05-18 13:08:36 733 1
原创 利用 getchar() 读取回车符解决 scanf() 读取单个字符的不足
利用 getchar() 读取回车符解决 scanf() 读取单个字符的不足。
2024-05-16 20:45:05 463
原创 “分块”算法的基本要素及 build() 函数的构建细节
“分块”算法适合求解 m=n=10^5 规模的问题,或 m*sqrt(n)≈10^7 的问题。其中,n 为元素个数,m 为操作次数。
2024-05-16 14:07:29 252
原创 HDU 5057:Argestes and Sequence ← 分块算法(单点更新、区间查询)
● 分块是用线段树的分区思想改良的暴力法。代码比线段树简单。效率比普通暴力法高。分块适合求解 m=n=10^5 规模的问题。或 m*sqrt(n)≈10^7 的问题。其中,n 为元素个数,m 为操作次数。
2024-05-16 11:43:34 883 1
原创 洛谷 P3372:线段树 1 ← 分块算法模板(区间更新、区间查询)
● 本题其实就是线段树的模板题,这里用来练习分块。分块适合求解 m=n=10^5 规模的问题。或 m*sqrt(n)≈10^7 的问题。其中,n 为元素个数,m 为操作次数。
2024-05-15 09:05:00 1139 1
原创 洛谷 P1002:过河卒 ← 动态规划
● 这是一道典型的动态规划算法题目。设 f(i,j) 表示从 (0,0) 走到 (i,j) 的路径的条数。如果 i=0 且 j=0,则 f[i][j]=1;否则,如果i=0,则 f[i][j]=f[i][j−1];否则,如果 j=0,则 f[i][j]=f[i−1][j];否则,f[i][j]=f[i−1][j]+f[i][j−1]。
2024-05-13 22:35:32 442
原创 洛谷 P3809:后缀排序 ← 后缀数组
● 倍增法求后缀数组的算法用到如下 3 个数组:(1)后缀数组 sa[i]:排第几的是谁?← 后缀数组中的第 i 个元素,是从第几个字符开始的后缀?(2)名次数组 rk[i]:你排第几?← 从第 i 个字符开始的后缀,在后缀数组中排第几?(3)lcp[] 数组:表示后缀 sa[i] 与 sa[i−1] 的最长公共前缀的长度。更常表述为height[] 数组。● sa[] 与 rk[] 是一一对应关系,互为逆运算。即存在关系 sa[rk[i]]=i 及rk[sa[i]]=i。
2024-05-11 22:52:39 289
原创 后缀树与后缀数组简介及代码模板 ← AcWing 2715
● 后缀数组 sa(Suffix Array):后缀数组 sa 的值就是将字符串的所有后缀子串按字典序排序后对应的原始下标。● 后缀数组元素 sa[i],是原字符串中从第 i 个位置开始的后缀子串(下标从 0 开始)。
2024-05-11 11:28:47 671 1
原创 洛谷 P2580:于是他错误的点名开始了 ← 字典树(Trie 树)之字符串检索
● 本例提供了 STL Map 及 Trie 两种代码解法。● 不同字典树问题的代码有 insert() 及 query() 两个核心函数。其 insert() 函数代码大多都一样,而 query() 函数会随问题多变。
2024-05-10 18:41:04 834
原创 AcWing 142:前缀统计 ← 字典树(Trie树)之前缀统计
●字典树(Trie 树)是一种用于快速检索的多叉树结构。● 除根结点外,字典树的每个结点只包含一个字符。● 字典树中每个结点都有一个序号。字典树的根结点为空结点,序号为 0。● 字典树在实现时,会对每个字符串的结尾设置标记。● 字典树常用于词频统计、前缀匹配、字符串检索、字符串排序等。
2024-05-10 11:27:54 227
原创 AcWing 161:电话列表 ← 字典树(Trie 树)之前缀匹配
● 字典树(Trie 树)是一种用于快速检索的多叉树结构。● 除根结点外,字典树的每个结点只包含一个字符。● 字典树中每个结点都有一个序号。字典树的根结点为空结点,序号为 0。● 字典树在实现时,会对每个字符串的结尾设置标记。● 字典树常用于词频统计、前缀匹配、字符串检索、字符串排序等。
2024-05-09 23:32:01 869
原创 AcWing 835:Trie字符串统计 ← 字典树(Trie树)之词频统计
●字典树(Trie 树)是一种用于快速检索的多叉树结构。● 除根结点外,字典树的每个结点只包含一个字符。● 字典树中每个结点都有一个序号。字典树的根结点为空结点,序号为 0。● 字典树在实现时,会对每个字符串的结尾设置标记。● 字典树常用于词频统计、前缀匹配、字符串检索、字符串排序等。
2024-05-09 17:52:56 963
原创 洛谷 P4148:简单题 ← KD-Tree模板题
● KD-Tree 作为一种二分查找树,由 Jon Louis Bentley 发明。所谓 KD-Tree,即 Multidimensional Binary Search Tree 的简称,其中的 K表示数据空间的维度。KD-Tree 高效支持高维空间的最近邻搜索、空间搜索,因此深入了解 KD-Tree 的原理以及底层实现,对机器人或无人驾驶领域的从业者来说,意义非凡。
2024-05-08 18:00:57 983
原创 洛谷 P3850 [TJOI2007] 书架: ← FHQ-Treap模板题
● FHQ−Treap,也称非旋 Treap,由范浩强提出。顾名思义,FHQ−Treap 就是不需要通过旋转,而是通过分裂(split)与合并(merge)维护的 Treap。FHQ−Treap 与 Treap 的另外一个区别是 FHQ−Treap 可持久化。● FHQ-Treap 的高明之处在于所有的操作都只用到了分裂(split)与合并(merge)这两个基本操作。
2024-05-07 23:13:25 1102
原创 洛谷 P6136:【模板】普通平衡树(数据加强版) ← Splay树模板题
● Treap 树解决平衡的办法是给每个结点加上一个随机的优先级,实现概率上的平衡。Splay 树直接用旋转调整树的形态,通过旋转改善树的平衡性。计算量小,效果好。● Splay 树的旋转主要分为“单旋”和“双旋”。
2024-05-07 19:08:31 351
原创 洛谷 P3391:文艺平衡树 ← Splay树模板题
● Treap 树解决平衡的办法是给每个结点加上一个随机的优先级,实现概率上的平衡。Splay 树直接用旋转调整树的形态,通过旋转改善树的平衡性。计算量小,效果好。● Splay 树的旋转主要分为“单旋”和“双旋”。
2024-05-07 12:24:19 899
原创 Splay 树简介及代码模板
● Splay Tree 是动态树与树链剖分的基础。● 左旋和右旋是 Splay Tree 的两个基本操作。它在保证 Splay Tree 的中序遍历序列不变的前提下,调整 Splay Tree 的高度,从而维护 Splay Tree 的平衡。● Splay Tree 的核心操作是 rotate(x,k),即将结点 x 旋转到结点 k 的下方。其他所有操作,都是围绕着 rotate(x,k) 进行的。
2024-05-06 23:29:48 610
原创 Treap树 ← 洛谷P3369、AcWing253
●Treap 树是一种原理比较简单的 BST。Treap=Tree+Heap,即 Treap 是树和堆(大根堆或小根堆)的结合,通常翻译成树堆。●Treap 树的操作基于“键值 val + 优先级 pri”。Treap 树的每个结点包含两个信息 (val, pri),对于 val,它是一个BST(二叉查找树),对于 pri,它是一个堆(大根堆或小根堆)。
2024-05-06 15:54:15 632 1
原创 AcWing 852:spfa判断负环 ← 链式前向星存图
● SPFA 算法是判断负环的常用算法,其实现如下: 在更新 dis[i] 时,我们顺带维护一个 cnt[i] 数组,该数组用来存放最短路的边数。如果 cnt[i]≥n 时,说明图中有 n+1 个点,而题目一共给了 n 个点,说明一定存在环。而 SPFA 算法更新的要求是距离变短,因此这个环一定是负环。 但是从原点开始可能走不到负环,我们需要初始时把所有的点都放入队列中。
2024-05-06 08:05:57 364
原创 AcWing 851:spfa求最短路 ← 链式前向星存图
● 百度百科:SPFA 算法是 Bellman-Ford 算法的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA 最坏情况下时间复杂度和朴素 Bellman-Ford 相同,为 O(VE)。●Bellman ford 算法可以存在负权回路,是因为其循环的次数是有限制的,因此最终不会发生死循环。但是, SPFA 算法不可以。这是因为,SPFA 算法用队列来存储,只要发生了更新就会不断的入队。因此,假如有负权回路请不要用 SPFA ,否则会死循环。
2024-05-05 17:45:42 345
原创 洛谷 P1440:求m区间内的最小值 ← 笛卡尔树
● 简言之,一棵笛卡尔树,val 决定了结点的值,pri 决定了结点的位置。● 笛卡尔树的构建过程中,常还需借助“单调栈”这种数据结构,以保证在线性时间内完成笛卡尔树的构建。单调栈中保存的始终是笛卡尔树的右链,即由笛卡尔树的“根结点、根结点的右儿子、根结点的右儿子的右儿子、……”组成的链。● 单调栈中的元素值从栈顶到栈底需依次递减,且栈底存储的是根结点。
2024-05-03 18:33:39 537
原创 AcWing 3194:最大的矩形 ← 笛卡尔树
●笛卡尔树是一种非常特殊的二叉查找树(BST)。每个结点有两个信息 (pri, val),如果只考虑pri,它是一棵二叉查找树,如果只考虑val,它是一个小根堆。一般地,构建笛卡尔树时,我们按第一关键字 pri 排序(很多时候,pri 值即为数组下标)。本题中,pri 值就是数组下标,无需排序,直接按给定的高度建树。
2024-05-03 12:27:33 706
原创 洛谷 P1377 [TJOI2011]:树的序 ← 笛卡尔树
●题目中所提及到的“现给出一个生成序列,求与其生成同样二叉查找树的所有生成序列中字典序最小的那个”是一个必须理清的关键。意思是说,存在多个序列,能生成同样的二叉查找树,需输出字典序最小的那个。● 如何构建笛卡尔树?据笛卡尔树结点信息可知,笛卡尔树是具有双权重(pri, val)的树。那么,如何构建笛卡尔树?构造笛卡尔树时,若各个结点指定了 pri,则先对各个 pri 递增排列。否则,pri 默认为数组下标。然后,依据 pri 顺序将结点逐个插入到笛卡尔树中。
2024-05-01 23:22:46 1361 1
原创 洛谷 P5854:【模板】笛卡尔树
●笛卡尔树是一种非常特殊的二叉搜索树(BST)。每个结点有两个信息 (pri, val),如果只考虑 pri,它是一棵二叉搜索树,如果只考虑 val,它是一个小根堆。●一个有趣的事实是,如果笛卡尔树的pri 值互不相同,val 值互不相同,那么这个笛卡尔树的结构是唯一的。● 构造笛卡尔树时,若各个结点指定了 pri,则先对 pri 从小到大排列。否则,pri 默认为数组下标。在保证 pri递增的情况下,可以在线性时间复杂度内构造一棵笛卡尔树。
2024-04-30 23:23:14 575
原创 按结构体“字符数组成员”对结构体数组进行排序
按结构体的“字符数组成员”对结构体数组进行排序前,需要自定义排序函数。其中,要用到 strcmp 函数。C++ 中 strcmp(a,b) 函数的用法● 若 len(a)>len(b),则返回1。● 若 len(a)==len(b),则返回0。● 若 len(a)
2024-04-30 17:04:23 152
原创 C++ 中 scanf 的高阶用法:scanf(“%[a-z]“,ch);
● C++ 中 scanf 的高阶用法:scanf("%[a-z]",ch);语句 scanf("%[a-z]",ch); 表示只读入小写字母入字符串。任何包含非小写字母的字符串,将不能读入,自然也不可能有输出。例如:运行下面代码:输入 abc,将输出 abc;输入 abcA,将无输出。
2024-04-30 16:18:29 95
原创 C++ 中 strcmp(a,b) 函数的用法
●若 len(a)>len(b),则返回1。●若 len(a)==len(b),则返回0。●若 len(a)
2024-04-30 13:58:28 186 1
原创 POJ 1785:Binary Search Heap Construction ← 笛卡尔树的构造及中序遍历
● 笛卡尔树(1)笛卡尔树是由一系列不同数字构成的二叉树。(2)笛卡尔树的结点有两个属性:键值 val、优先级 pri。其中,键值 val 预设,优先级 pri 随机或预设。笛卡尔树各个结点的键值 val 满足堆的性质,各个结点的优先级 pri 满足二叉搜索树(BST)的性质。(3)笛卡尔树可由数列构造,在区间最值查询、区间 topK 查询等问题上有广泛应用。(4)笛卡尔树结点键值 val 的中序遍历序列为构建其的原始序列。最小堆笛卡尔树表示满足小根堆性质的笛卡尔树。
2024-04-30 11:49:47 402
原创 POJ 2201:Cartesian Tree ← 笛卡尔树模板题
本题是笛卡尔树的模板题。●笛卡尔树是由一系列不同数字构成的二叉树。笛卡尔树满足堆的性质,笛卡尔树的中序遍历序列为构建其的原始序列。最小堆笛卡尔树表示满足小根堆性质的笛卡尔树。● 笛卡尔树的结点有两个属性:键值 val、优先级 pri。其中,键值 val 预设,优先级 pri 随机或预设。●笛卡尔树可由数列构造,在区间最值查询、区间 topK 查询(range top k queries)等问题上有广泛应用。
2024-04-30 08:45:09 639
原创 笛卡尔树 ← AcWing 4279
●笛卡尔树(1)笛卡尔树是由一系列不同数字构成的二叉树。(2)笛卡尔树的结点有两个属性:键值 val、优先级 pri。其中,键值 val 预设,优先级 pri 随机或预设。笛卡尔树各个结点的键值 val 满足堆的性质,各个结点的优先级 pri满足二叉搜索树(BST)的性质。(3)笛卡尔树可由数列构造,在区间最值查询、区间 topK 查询等问题上有广泛应用。(4)笛卡尔树结点键值 val的中序遍历序列为构建其的原始序列。最小堆笛卡尔树表示满足小根堆性质的笛卡尔树。
2024-04-29 21:26:09 252
原创 请编程输出 1~7 位的所有自幂数
● 本算法代码,在计算 8 位及以上的自幂数时,相当卡,需优化。故本算法代码只用来计算1~7 位的所有自幂数。●一个 n 位的自然数,若它各位上的数字的 n 次幂之和等于它本身,则称之为 n 位自幂数。
2024-04-28 20:52:37 302
原创 请输入一个 11 位以内的数,判断它是几位(小于等于10位)自幂数?
一个 n 位的自然数,若它各位上的数字的 n 次幂之和等于它本身,则称之为 n 位自幂数。
2024-04-28 13:31:08 288
QGIS二次开发 の PyCharm开发环境配置.pdf
2021-04-03
数据结构(C_语言描述)(第2版)_陈广_9787301247761_课后习题参考答案.doc
2019-05-14
OpenCV.2.Computer.Vision.Application.Programming.Cookbook
2012-09-01
Data Structures and Problems Solving Using JAVA (Fourth Edition)
2011-12-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人