- 博客(36)
- 收藏
- 关注
原创 倍增求 LCA
LCA 指的是最近的公共祖先,倍增法求解 LCA 的步骤如下。 a. 求深度:对于每个节点 dfs 预处理处节点深度; b. 求倍增祖先:计算出每个节点向父元素跳 步所到达的节点(在这里 大于整棵树的最大深度) 备注: a. 设 f [ x , k ] 表示节点 x 向上跳 步能到达的祖先, f [ x , 0 ] 表示 x 的父元素,如对应节点不存在 f [ x , k ] = 0。 b. 将路径长度 分为两半,x 跳
2024-09-30 12:49:19
624
原创 倍增、RMQ
倍增法(英语:binary lifting ),顾名思义就是翻倍。他能够使线性的处理转化为对数级的处理,大大的优化时间复杂度。 这个方法在很多算法中均有应用,其中最常用的是:RMQ 问题和求 LAG(最近公共祖先)。 倍增思想是一种十分巧妙的思想。“倍增”二字体现在它每次将当前的已知结果或考察范围扩大一倍。正是由于这个原因,它的时间复杂度降低了很多,一般是将一个系数 N 变为 。 例子 1:如果要求比 n 小的最近的 2 的幂,,这个值,是从 1 开始跳跃 次得到的
2024-09-29 13:42:22
220
原创 线段树及应用
目录1. 线段树基础(1)什么是线段树(2)线段树的拆分原理(3)相关算法对比 (4)线段树的使用前提(5)线段树建树操作(6)线段树单点修改(7)线段树区间查询 2. 区间修改:延迟标记与标记永久化最后 a. 线段树是:利用分治思想处理对一段序列进行大量区间操作(区间修改、区间查询)的数据结构; b. 线段树可以在 O ( n log n ) 的时间复杂度内,完成区间修改 / 区间查询操作; c. 线段树的叶节点即为原序列,内部节点除了左右儿子之外,还保存着其分管
2024-09-29 13:00:47
386
原创 Trie 字典树
Trie 字典树指的是:某个字符串集合构造的又有根树。由于 Trie 字典树,较好的利用了字符串的公共前缀,因此有效的节约存储空间。 Trie 树典型应用是:用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询比哈希树高。 它有 3 个基本性质: A、根结点不包含字符,除根结点外每一个结点都只包含一个字符; B、从根结点到某一结点
2024-09-26 13:39:38
426
原创 KMP算法
目录1. KMP 算法的概念2. KMP 的原理 3. next 数组的计算方法(1)加快匹配的原理(2)next 数组的含义(3)如何高效匹配(4)如何高效求 next 数组 如:有上图所示的父串 s 和子串 p,如果要匹配出子串 p 在父串 s 中是否出现过或者出现过多少次。 暴力的做法如图所示,第 1 次父串 s 从第 1 个字符开始和子串匹配,匹配到第 8 个字符发现不等,匹配失败。 第 2 次父串 s 从第 2 个字符开始尝试和子串匹配,由第 1 次匹配可
2024-09-25 13:26:52
793
原创 Trie字典树和AC自动机(题目)
题目描述:三年级二班已经完成了竞选班长的投票,已知一共有 n 张投票,每张投票上写了一位同学的名字。投票统计结束后,张老师随意问一个同学的名字,请编程快速检索出,该同学共有几票。输入:第一行读入一个整数 n ,代表产生了 n 张投票。( n≤10^5 )接下来 n 行,每行有一个字符串 s ,代表该张投票上写的同学的姓名(姓名由不含空格的小写英文字母组成,n 个姓名的总长度 ≤10^6。接下来一行读入一个整数 m( m≤10^5 ),代表王老师提问的同学的姓名数量。
2024-06-05 12:19:53
535
原创 KMP算法(题目)
题目描述:给定一个父字符串 s 和子字符串 p ,请按照从前向后的顺序,请求出 p 在 s 中所有出现的起始位置。例如:s=ABADABCEABABA,p=ABA,则求解的结果是:1 9 11。输入:第 1 行读入一个仅包含大写字母的字符串 s;第 2 行读入一个仅包含大写字母的字符串 p;s 和 p 均是长度不超过 106 的字符串。输出:输出 1 行,按题意输出 p 在 s 中出现的位置,数字之间用空格隔开。样例:输入:ABA输出:1 9 11。
2024-06-04 17:45:47
660
原创 2023csp-j(选择题)
【参考答案】A【知识点】链表的插入【解析】向链表头部中插入数据newNode的流程是:1. 初始化待插入数据newNode:Node* newNode = new Node;2. 将newNode的next指针指向:head:newNode -> next = head;3. 将head指针指向newNode:head = newNode;
2024-05-19 10:33:06
1397
转载 十大经典排序算法
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。选择排序的思想就是:从当前数中选出一个最大或者最小的值排在最前面,然后从剩下的数中选出剩下数的最值排在已经排序的数的后面,算法时间复杂度O (n²)。首先,我的这个十大经典排序算法是。
2024-05-17 17:19:30
1397
1
原创 阅读完善程序复习(四)2022csp-s
错题:25. 答案:D解析:模拟即可。27. 答案:C解析:代入一个特例即可(基础,可以分析一下排序)。32. 答案:B解析:模拟即可。33. 答案:B解析:模拟即可。34. 答案:C解析:记录合并数组的当前位置的下标。35. 答案:B解析:比较待归并的两个数组的当前元素的大小。36. 答案:C解析:根据程序明确left1和right1的含义。39. 答案:A解析:根据题意作答,容器2中的水倒入容器1。41. 答案:A解析:判断是否已有C升水。42. 答案:A解析:判断接下来是否将容器2中的水倒入容器1。
2024-05-10 17:57:20
449
1
原创 PUBG下载
https://www.pubgmobile.com/HK/events.shtml?page=1(手机版)https://steam2.ssyxjs.cn/gameStore/detail12/2204?plan=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F-18&e_creative=88906878234&e_keywordid=784021409904&bd_vid=8434250545082323133(可能是电脑版)https://www.pubg.com/zh-
2024-05-01 19:48:52
135
2
原创 图论的基础(水题)
有一个无向图,图中要么有两个奇点要么0奇点,如果是欧拉回路请从第一个点(1号点)为起点开始遍历,如果有两个奇点,则以字典序大的为起点开始遍历,在遍历的过程中,字典序小结点的先遍历。2 . 接下来由于 DFS 的递归回溯,会退回终点的上一个结点,继续往下搜索,直到寻找到第二个无边可走的结点,则这个接点必定是欧拉路中终点前最后访问的结点。由于是 DFS 递归结束的时候记录的,那么该边是走完欧拉道路的最后的那条边,层层返回后最开始的也是最开始的出发地。第一行为两整数,n 和 e ,表示 n 个顶点,e 条边。
2024-04-18 17:25:47
1026
1
原创 并查集概述
并查集是一种树型的数据结构,由于处理一些不相交集合的合并及查询问题。并查集思想是用一个数组表示了整片森林,树的根节点唯一是一个集合的标识,我们只要找到了某个元素的树确定它在哪个集合里。最后,现在我们就学完了并查集,并查集其实并不难,难的是要写太多字了!!!以上是作者本人自己总结。我还要说的是:看官们在学习后要趁热打铁做一份笔记呦(有利于加深理解)。最后的最后:!!!!!!!!
2024-04-07 18:02:24
634
原创 STL标准模板库(水题)
目录A. 数组存数B. 排序C. 约瑟夫问题D. 坐标排序E. 小X算排名F. 10进制转D进制G. 括号匹配H. 叫号软件温馨提示:题目描述今有 N 个数组,初始时,N 个数组均为空。共有 M 次操作,每次在第 X 个数组中加入数字 Y。问最终各数组中有多少数,并将它们排序输出。比如,输入如下数据:表示有 3 个数组,共有 5 次操作,分别向第 1 个数组存入 33,第 1 个数组存入 2 ,第 1 个数组存入 1,第 2 个数组存入 1,第 3 个数组存入1。输出如下:第 1 行表示:第 1
2024-03-27 13:04:24
894
1
原创 STL标准模板库(一)
这下子我们一口气将STL中常用的一大部分讲完了,请先缓一缓,自己去写写代码,多多记忆,这样才能将收益最大化。等下一篇,我们将剩余的stack,queue,priority_queue也一次性讲完!最后,本篇文章是作者自己学习过后自行总结而成,可能会有些缺漏,我就在此,请看官们赐教!!!!!!!
2024-03-21 13:12:01
2349
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人