随笔分类 -  数据结构

摘要:template <typename T> class SparseTable { using VT = vector<T>; using VVT = vector<VT>; using func_type = function<T(const T &, const T &)>; VVT ST; s 阅读全文
posted @ 2024-09-21 17:31 mcr130102 阅读(10) 评论(0) 推荐(0) 编辑
摘要:引入 并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。 顾名思义,并查集支持两种操作: 合并(Union):合并两个元素所属集合(合并对应的树) 查询(Find):查询某个元素所属集合(查询对应的树的根节点),这可以用于判断两个元素 阅读全文
posted @ 2024-07-24 09:36 mcr130102 阅读(80) 评论(0) 推荐(0) 编辑
摘要:思路 直接单调栈魔板题 code #include<bits/stdc++.h> using namespace std; #define rep(i,x,y) for(int i=x;i<=y;i++) #define frep(i,x,y) for(int i=x;i>=y;i--) const 阅读全文
posted @ 2024-07-24 08:19 mcr130102 阅读(7) 评论(0) 推荐(0) 编辑
摘要:引入 链表是一种用于存储数据的数据结构,通过如链条一般的指针来连接元素。它的特点是插入与删除数据十分方便,但寻找与读取数据的表现欠佳。 与数组的区别 链表和数组都可用于存储数据。与链表不同,数组将所有元素按次序依次存储。不同的存储结构令它们有了不同的优势: 链表因其链状的结构,能方便地删除、插入数据 阅读全文
posted @ 2024-07-23 16:36 mcr130102 阅读(79) 评论(0) 推荐(0) 编辑
摘要:定义 ST 表(Sparse Table,稀疏表)是用于解决 可重复贡献问题 的数据结构。 "什么是可重复贡献问题?" 可重复贡献问题 是指对于运算 opt,满足 xoptx=x,则对应的区间询问就是一个可重复贡献问题。例如,最大 阅读全文
posted @ 2024-07-23 11:17 mcr130102 阅读(103) 评论(1) 推荐(1) 编辑
摘要:一、相关定义 原理:queue 队列也是一个线性存储表,元素数据的插入在表的一端进行,在另一端删除,从而构成了一个先进先出FIFO(First In First Out)表。 队头&队尾:插入一端称为队尾,删除一端称为队首。 C++队列是一种容器适配器,默认使用双端队列deque来实现,将 dequ 阅读全文
posted @ 2024-07-20 07:59 mcr130102 阅读(21) 评论(1) 推荐(0) 编辑
摘要:引入 图论中的树和现实生活中的树长得一样,只不过我们习惯于处理问题的时候把树根放到上方来考虑。这种数据结构看起来像是一个倒挂的树,因此得名。 定义 一个没有固定根结点的树称为 无根树(unrooted tree)。无根树有几种等价的形式化定义: 有 n 个结点,n-1 条边的连通无向图 无向无环的连 阅读全文
posted @ 2024-07-15 20:29 mcr130102 阅读(45) 评论(1) 推荐(0) 编辑
摘要:介绍 栈是一种线性的数据结构,它具有先进后出的特性。 栈是一种“操作受限”的数据结构——栈的插入和弹出都只能在一端进行。正是因为栈的这一个特性,计算机许多底层逻辑都是由栈实现的。 栈的操作 将元素压入栈 查询栈的顶端元素 弹出栈的顶端元素 C++中栈的实现 C++STL中包含栈的实现,可以通过包含s 阅读全文
posted @ 2024-07-14 21:26 mcr130102 阅读(10) 评论(0) 推荐(0) 编辑
摘要:可并堆,就是可以合并的堆。堆满足一个性质,就是当前节点,都大于或者等于他的所有子树上的节点,自然在这里我所讲的是结点的权值。显而易见,既然可并堆是堆的一种,容易推出,可并堆也满足这个性质。 现在思考一个问题,当题目里需要合并两个堆的时候,该如何合并呢?如果只是普通的堆的话,我们可以运用启发式合并的思 阅读全文
posted @ 2024-07-14 14:45 mcr130102 阅读(13) 评论(0) 推荐(0) 编辑

请不要抄袭任何人的博客,这是对一名开发者最基本的尊重。
点击右上角即可分享
微信分享提示
想一个人有多想念,那又是文字失效瞬间。