随笔分类 - OI
摘要:文本生成器 首先考虑一个容斥,算出不包含任何一个单词的文章的数量。 我们设 表示当前文章长度为 ,最后一个字符在 自动机上的 号点的方案数。我们要求的答案就是 \(\displaystyle 26^m-\sum_{i=0}^{idx}f_
阅读全文
摘要:AC 自动机1 前置知识: ,字典树。 自动机,不是用来自动 题目的,而是用来处理字符串问题的(虽然确实可以帮助你 )。 这里总结了 自动机三大步骤。 插入 考虑字典树,我们直接把所有模式串插入到字典树内即可,这并不困难,代码: vo
阅读全文
摘要:例题 MKTHNUM - K-th Number 考虑如果我们对每个操作进行二分怎么做。 显然是对这个区间不大于二分值 的数统计个数,看个数 和 的大小关系。如果 更大,证明 大了,如果 更小,证明 \(mi
阅读全文
摘要:优化动态规划 序列 首先要会最长上升子序列的转移,这里就不说了。 我们 位置的初始值为 ,可能变成的最大值为 ,可能变成的最小值为 。 然后如果 要转移到 ,则需要满足:\(j<i,mx_j\le a_i,a_j\le
阅读全文
摘要:简介 前置芝士:归并排序。 分治是个离线算法,可以解决三维偏序或者优化 。 陌上花开 维护三维偏序有个口诀:一维排序,二维归并,三维数据结构。 考虑第一维直接排序解决掉,然后还剩两维。 我们考虑第二维用归并排序解决掉。然后假设当前区间 ,区间中点 \(m
阅读全文
摘要:普通莫队 DQUERY - D-query 先想一下最朴素的暴力怎么写。显然可以用一个 数组记录每种元素的出现次数,然后如果这种元素是第一次出现,则增加答案,时间复杂度 。 然后考虑如果如何用一个已经求出来答案的询问推出另外一个询问的答案。 显然我们要增加一部分数和
阅读全文
摘要:权值线段树 线段树在这里作为前置知识,我们就不说了,而且权值线段树也不是核心内容,不会大篇幅讲。 首先,权值线段树在维护什么?维护的是桶。 然后,权值线段树有什么用?可以求一些序列的第 大之类的问题。 于是我们放个板子题。 第 k 小整数 简单题,直接看代码和注释就行,当然也可以使用线性
阅读全文
摘要:基本思想 放在前面:该数据结构的时间复杂度很玄学,一般用于骗分,当然不排除作为正解的可能性。 下面简称该数据结构为 . 是一种可以高效处理 维空间信息的数据结构。换句话说,他是维护 维空间 个点的一种平衡树。 一般在算法竞赛中,我们需
阅读全文
摘要:笛卡尔树基本概念 笛卡尔树是基于一个静态序列 的,根据这个序列 ,我们可以构造出对应的笛卡尔树。 笛卡尔树有三点要求需要满足: 笛卡尔树是二叉树。 笛卡尔树的编号的中序遍历为 ,权值中序遍历为 。 笛卡尔树的权值满足大根堆或者小根堆的性质。 这里
阅读全文
摘要:吉司机线段树 为了方便说板子,这里直接把板子题放上去讲了。 线段树 3 简单说一下 个操作都在干什么: 区间加一个数。 区间和一个数取最小值。 区间求和。 区间求最大值。 区间求历史最大值。 好了,前 个操作如果单独拉出来出成一道题,显然是好做的,于是我们的难点就是最后一个操
阅读全文
摘要:李超线段树 李超线段树 发现要维护的问题十分难做,所以我们要引入李超线段树。 我们发现,如果在一个区间内,一条线段的整体在另一条线段上方,那么这条线段一定更优,我们称之为最优线段。但是如果并不是这样,应该如何做呢? 这里给出线段为一个区间内的最优线段的条件: 线段的定义域覆盖了整个区间。 线段在区间
阅读全文
摘要:点分治及其应用 思想 先说一下点分治的基本思想:选择树上一个点作为分治中心,为了保证复杂度,选择的点有一些特殊的要求。 接下来,把原问题分解成几个相同的子问题,进行递归解决。 一般地,我们假设当前根节点为 ,所以我们要统计的路径必然满足以下二者之一: 经过 。 不经过 \(r
阅读全文
摘要:前置芝士:强连通分量。 先放一个板子题:2-SAT。 我们先考虑拆点,把每个变量 拆成两个点, 和 ,前一个代表这个变量 取假,后一个代表这个变量 取真。 既然有了点,我们就要考虑连边。例如给一个条件:\
阅读全文
摘要:前置芝士:动态开点线段树。 先放一个板子题:Legacy。 题意放一下: 有 个点, 次操作: 从 到 连一条权值 的有向边。 从 向编号在区间 内的每个点连一条边权为 的有向边。 从编号在区间 \
阅读全文