摘要: FUCKING CRAZY! 食物链太难了 并查集 快速地处理 将两个集合合并 询问两个元素是否在一个集合当中 比如 belong[x] 存储的是 x 属于哪一个集合,比如 belong[x] = a 代表 元素 x 属于 集合 a 那么我们就可以用 O(1) 来判断 元素 x 和 y 是否在同一个 阅读全文
posted @ 2022-10-15 20:30 ShibuyaKanon 阅读(42) 评论(0) 推荐(0)
摘要: Trie 基本用法&作用 快速地存储和查找字符串集合的数据结构 我们在使用 trie 的过程中,我们使用的字符串一定是 都是 大写/小写,并且长度不长 比分说我们有字符串: abcdef abdef aced bcdf cdaa bcdc bcff 首先 trie 树有一个根节点 root 我们现在 阅读全文
posted @ 2022-10-14 17:46 ShibuyaKanon 阅读(36) 评论(0) 推荐(0)
摘要: KMP 原理 失败了退一步,再尝试 假设我们有一个字符串 暴力枚举法 假设 S[N] 是原串,P[M] 是模式串 for(int i = 1;i <= n;i++) { bool flag = true; for(int j = 1;j <= m;j++) { if(s[i]!=p[j]) { fl 阅读全文
posted @ 2022-10-13 17:19 ShibuyaKanon 阅读(24) 评论(0) 推荐(0)
摘要: 单调队列 经典应用:滑动窗口里的最大值/最小值 举例 假设有序列: 1 3 -1 -3 5 3 6 7 第一次滑动窗口是 【1 3 -1】最小值是 -1 第二次滑动窗口是 【3 -1 -3】最小值是 -3 以此类推最后一次滑动窗口是 【3 6 7】 最小值是 3 我们用队列来维护这个窗口,保证队列中 阅读全文
posted @ 2022-10-11 16:46 ShibuyaKanon 阅读(19) 评论(0) 推荐(0)
摘要: 队列 原理 先进先出,可以理解为一个双头的筒,每次也只有两个操作,从后面塞入一个东西和从前面拿出一个东西 模板 // hh 表示队头,tt表示队尾 int q[N], hh = 0, tt = -1; // 向队尾插入一个数 q[ ++ tt] = x; // 从队头弹出一个数 hh ++ ; // 阅读全文
posted @ 2022-10-10 16:39 ShibuyaKanon 阅读(55) 评论(0) 推荐(0)
摘要: 栈 原理 先进后出,可以理解成一个单口的罐子,每次只有两个操作,放进去和拿出来最上面的一个 模板 // tt表示栈顶 int stk[N], tt = 0; // 向栈顶插入一个数 stk[ ++ tt] = x; // 从栈顶弹出一个数 tt -- ; // 栈顶的值 stk[tt]; // 判断 阅读全文
posted @ 2022-10-07 18:18 ShibuyaKanon 阅读(25) 评论(0) 推荐(0)
摘要: 双链表 原理 用来优化某些问题 有两个指针,一个指向前,一个指向后 一个 e[N] 数组存储值 l[N] 代表他左边是什么 r[N] 代表他右边是谁 模板 // e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点 int e[N], l[N], r[N] 阅读全文
posted @ 2022-10-06 16:59 ShibuyaKanon 阅读(28) 评论(0) 推荐(0)
摘要: 单链表 为什么要用数组模拟链表? 快! 用的最多是 邻接表(实际上是 n 个链表)--> 用来存储 图 和 树 单链表初始状态: head-> 空结点 插入数据后: head -> node1 -> node2 -> node3 -> null 每个 node 都有一个 value 和 一个 nex 阅读全文
posted @ 2022-10-03 16:03 ShibuyaKanon 阅读(19) 评论(0) 推荐(0)
摘要: 区间合并 给我们很多很多区间,这两个区间有交集,我们合并成一个区间 例如 [1,9] 和 [3,13] 可以合并为 [1,13] 原理 按所有区间的左端点排序 扫描整个区间,把所有可能有交点的区间进行合并 每次维护一个区间 [ st , ed ] 假设扫描到了第 i 个区间 [ sti , edi 阅读全文
posted @ 2022-09-30 15:49 ShibuyaKanon 阅读(40) 评论(0) 推荐(0)
摘要: 离散化 原理 假如我们有一对数值 范围是 0 - 10^9^ 但是个数比较少,只有比如 10^5^的数字,我们需要以这些值位下标来做 所以我们需要这个序列映射到 从 0 开始的连续的自然数 比如我们假定有数组:a[] :1,3,100,200,500000 我们将 1 映射到 0,3 映射到 1,1 阅读全文
posted @ 2022-09-29 15:31 ShibuyaKanon 阅读(41) 评论(0) 推荐(0)