随笔分类 -  知识总结 / 数据结构

摘要:E https://atcoder.jp/contests/abc353/tasks/abc353_e 其实就是字典树板子题。 似乎遇到最长公共前缀,就该想到字典树。 依次加入每个字符串: 维护一个数组 siz 来统计在当前串之前的串在对应点的出现次数。 手模一下字典树的建树过程,显然如果当前串 \ 阅读全文
posted @ 2024-05-11 22:38 加固文明幻景 阅读(98) 评论(0) 推荐(0)
摘要:Problem - 1676H2 - Codeforces 思路 原问题可以以直接转化成求 \(a_i >= a_j(i <j)\) 的数量。 归并排序 原理很直接,归并排序就是为了减少逆序对的数量,所以直接在操作的时候记录减少的数量即可 排序后的数组无逆序对,归并排序的合并操作中,每次后段首元素被 阅读全文
posted @ 2024-03-07 13:39 加固文明幻景 阅读(56) 评论(0) 推荐(0)
摘要:概述 字典树是一种用于实现快速检索的多叉树结构,它的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符 \(c\) ,就沿着当前节点 \(c\)​ 的这个字符指针,走向该指针指向的结点。 时间复杂度 \(O(N)\), 空间复杂度 \(O(NC)\)。 实现 初始化 一棵空字典树仅包 阅读全文
posted @ 2024-02-06 09:46 加固文明幻景 阅读(49) 评论(0) 推荐(0)
摘要:概述 栈中元素满足单调性的线性数据结构,单调栈一般维护的是一个数前/后第一个大于/小于他的数。 单调栈解决的主要问题是什么呢? ​ 就跟单调队列差不多。单调队列主要处理的是一个区间内的最大/小值,而单调栈处理的是寻找以某个值为最小/大值的最大区间。相比较,实际上单调栈用的虽然少一些,但是比单调队列更 阅读全文
posted @ 2024-01-20 10:34 加固文明幻景 阅读(58) 评论(0) 推荐(0)
摘要:其实之前并查集题单都做到过,但是并没有针对性的总结为类型题。 引入 并查集擅长维护具有传递性的关系及其连通性。在某些问题中,“传递关系”不止一种,并且这些”传递关系“能够互相导出。此时就可以使用”扩展域“或”边带权“并查集来解决。 [NOI2002] 银河英雄传说 题目描述 杨威利擅长排兵布阵,巧妙 阅读全文
posted @ 2023-12-06 16:37 加固文明幻景 阅读(104) 评论(0) 推荐(0)
摘要:哈希表 引入 哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。所谓以「key-value」形式存储数据,是指任意的键值 key 都唯一对应到内存中的某个位置。只需要输入查找的键值,就可以快速地找到其对应的 value。可以把哈希表理解为一种高级的数组,这种数组的下标可以是很大的 阅读全文
posted @ 2023-11-27 17:18 加固文明幻景 阅读(61) 评论(0) 推荐(0)
摘要:并查集 概述 并查集是一种树形数据结构,经常用于处理一些集合之间的操作,例如元素查找,集合合并。 不同集合在并查集中以不同的树表示,一般每棵树的根节点会作为当前集合的代表元。 想要查询两个元素是不是在同一集合中,只需要比较两个元素所在集合的代表元是否相同即可。 实现 初始化 const int N 阅读全文
posted @ 2023-11-27 10:53 加固文明幻景 阅读(45) 评论(0) 推荐(0)
摘要:二叉树的最近公共祖先 概述 对于两个节点 \(u\)、\(v\),找到一个深度最大的 \(x\),\(x\) 是 \(u\) 、\(v\) 的祖先。 则 \(x\) 为这两个节点的最近公共祖先(LCA)。 初始方法 对于 \(u\) 或 \(v\): 从该结点一直向上找祖先,知道找到整棵树的根节点, 阅读全文
posted @ 2023-11-26 19:01 加固文明幻景 阅读(72) 评论(0) 推荐(0)
摘要:二叉搜索树 总定义 若左子树不空,则左子树上所有结点的值均小于它的根结点的值。 若右子树不空,则右子树上所有结点的值均大于它的根结点的值。 左、右子树也分别为二叉搜索树。 没有权值相等的结点。 结点定义 当前节点的权值 val 即序列中的数 左孩子的下标与右孩子的下标 ls rs 计数器 cnt 代 阅读全文
posted @ 2023-11-24 15:21 加固文明幻景 阅读(37) 评论(0) 推荐(0)
摘要:二叉树初探 完美二叉树 理论基础 完美二叉树,即层数为 \(h\),而总结点数为 \(2^h - 1\)。 对于每个结点 \(x\) ,左节点为 \(x\times2\),右节点为 \(x\times2+1\)。 显然可以用递归遍历。 存储方式 for (int i = 0; i < 1 << n; 阅读全文
posted @ 2023-11-23 00:00 加固文明幻景 阅读(56) 评论(0) 推荐(0)
摘要:初级线性表 vector v.resize(n,m) 重新调整数组大小为 \(n\),如果比原来的小,就删除多余信息。如果比原来的大,就把新增的部分初始化为 \(m\),其中 \(m\) 可以省略。 vector<int> a(n + 1) 初始化。 P3613 [深基15.例2]寄包柜 #incl 阅读全文
posted @ 2023-11-21 11:56 加固文明幻景 阅读(34) 评论(0) 推荐(0)