02 2025 档案
摘要:要求结果为整数,我们将所有 \(a_i\) 分解质因数,对于每个质数分别考虑。 考虑对于一个左端点 \(l\),能满足要求的右端点一定在从 \(l\) 开始的一段连续区间中。于是我们得对于每个 \(l\) 求出 \(ans_l\) 表示那个最远的右端点。 对于一个质数 \(p\),假设 \(a_i\
阅读全文
摘要:首先有一个 \(O(n^2)\) 的 DP:设 \(f_{i,j}\) 表示前 \(i\) 分钟,当前朝上的面煎了 \(j\) 分钟的最小翻面次数。于是有方程: \[f_{i,j}=\min(f_{i-1,j},f_{i-1,i-j}+1) \]其中第二种转移是翻面的,即仅当 \(\exist k,
阅读全文
摘要:一、概念 有一些题要求我们统计某些点对的数量,限制一般和点间的路径有关,\(O(n^2)\) 的时间复杂度无法承受。我们考虑首先选定一个根,此时路径分为两类: 经过根 不经过根 其中不经过根的可以在删掉根后在每个子树中进行统计,递归求解。于是只用处理经过根的情况。那么可以将这条路径拆成从一个点到根和
阅读全文
摘要:A. Cashback 设某一个子串的大小为 \(k\)。 \(k<c\),要删掉 \(0\) 个最小值,等价于 \(k\) 个长为 \(1\) 的区间。 \(k=c\),就是这个区间之和减掉这个区间最小值。 \(c<k<2c\),等价于 \(1\) 个长为 \(k\) 的区间和 \(k-c\) 个
阅读全文
摘要:一、前言 在今年 NOIP 前学习了 FHQ-Treap(一种平衡树),现在来记一记。 二、定义 Treap=tree+heap。具体的说,Treap 所维护的值满足二叉搜索树的性质,另一个变量优先级满足堆的性质。优先级一般使一个随机数,这使得树的高度保持在 \(O(\log n)\) 水平,二叉搜
阅读全文
摘要:首先将枚举原排列中的区间转化为枚举值域上的区间。 从小往大对 \(r\) 扫描线,对于每个 \(l\in[1,r)\) 维护将 \([l,r]\) 在原排列中最少要分成多少段。显然只有 \(1\) 或 \(2\) 段才会产生贡献。那么我们用线段树维护值域上的每个 \(l\) 的最小段数,并维护值域区
阅读全文
摘要:看到“回到 \(x\) 后的状态”,显然考虑可持久化线段树。记开灯的为 \(1\),关灯的为 \(0\),对于每个询问只需去查某些点的权值和即可。 考虑怎么将符合条件的点转化为区间。询问的是同一深度的点,可以考虑 bfs 序。考虑如果 \(y\) 是奇数,显然答案为 \(0\);否则询问的点就是 \
阅读全文
摘要:A. 【模板】线段树分裂 首先想到了 FHQ-Treap,但是合并的时候还需要满足大小顺序,不太好搞。考虑权值线段树。 \(1\) 到 \(4\) 操作都是比较常规的。对于 \(0\) 操作,在 \(p\) 的线段树上将 \([x,y]\) 这个区间拆成 \(O(\log n)\) 个区间,赋给新的
阅读全文
摘要:A. Alice 和璀璨花 做法和正常 LIS 类似。设 \(dp_{i,j}\) 表示在前 \(i\) 个中选 \(j\) 个的最小结尾显然对于相同的 \(i\),\(dp\) 值单调递增。二分出 \(dp_{i-1}\) 中第一个 \(\ge i\) 的位置 \(k\)。对于 \([0,k-1]
阅读全文
摘要:新加的点不会影响之前的询问,所以直接离线,先把所有点都建好。 将问题转化为:用 \(b\) 数组减去 \(a\) 数组,得到的形如 \(1,2,3,\dots\) 的等差序列的最大长度。 考虑将两个序列哈希,预处理出等差数列的哈希值,二分长度即可。而在树上维护路径数组的哈希值,可以用倍增解决。 时间
阅读全文
摘要:考虑一次询问,显然 DP,设 \(f_{u,0/1}\) 表示走路/坐船到 \(u\) 点的最小花费即可。 多次询问,考虑维护矩阵,广义矩阵乘,倍增处理询问。比如对于一条顺流的边 \(i\),可以构造矩阵: \[\begin{bmatrix} a_i&L+a_i-z_i\\ a_i&a_i-z_i
阅读全文
摘要:设 \(f_{u,i}\) 表示 \(u\) 接受 \(i\) 的信号,\(u\) 的子树内的答案。那么可以枚举 \(u\) 的儿子 \(v\) 接受信号的节点来转移。注意当 \(v\) 也枚举到 \(i\) 时要减去重复的 \(k\)。 考虑构造方案,设 \(ans_u\) 表示答案。首先可以求出
阅读全文
摘要:A. Minimum spanning tree for each edge 先建出最小生成树,对于树边答案就是最小生成树,对于非树边就从两个端点的路径上删掉权值最大的即可。 证明:在这个环中,首先强制选了这条边,然后按照从小到大的顺序选边,则一定不会选到删掉的那条边。 Code #include<
阅读全文
摘要:分块,设块长为 \(B\),预处理 \(f_{l,r,x}\) 表示仅考虑 \([1,l]\cup[r,\frac{n}{B}]\) 中的玩具,花 \(x\) 元的最大愉悦度。询问时向 \(f_{bel_l-1,bel_r+1}\) 中加入 \(l\) 和 \(r\) 所在块内的玩具即可。\(bel
阅读全文
摘要:考虑如果没有修改,用 ST 表就非常舒服。 考虑暴力修改,需要修改所有覆盖了这个位置的区间,时间复杂度是 \(O(n)\) 的。 而如果只修改 \(\frac{\log n}{2}\) 层,时间复杂度就是 \(O(\sqrt{n})\) 的。查询时从上往下查,最多查到第 \(\frac{\log n
阅读全文
摘要:A. Tree Master 考虑根号分治,暴力处理。对于一层,设点数为 \(cnt\)。 若 \(cnt>\sqrt{n}\),这样的层最多有 \(\sqrt{n}\) 层,每一层最多计算 \(q\) 次,时间复杂度为 \(O(q\sqrt{n})\)。 否则 \(cnt\le\sqrt{n}\)
阅读全文
摘要:一.前言 早就学了扫描线了,但是有一道题当时没做,现在才做,于是就来写写学习笔记。 哎我学习笔记前面咋老是这么多废话啊 二.定义 扫描线其实是一种思想,就是遍历某个值并将其加入数据结构,同时动态地解决一些问题。 听起来很抽象,那就看例题吧。 三.例题 [poj1151]亚特兰蒂斯 求矩形面积并。想象
阅读全文
摘要:考虑如果暴力 DP,设 \(f_{i,j}\) 为当前的串长为 \(i\),在 AC 自动机的 \(j\) 节点的概率。转移时枚举在后面加的字符 \(k\),如果加上 \(k\) 后匹配上了一个禁忌串就直接回到根节点,同时给答案贡献,否则就继续匹配。\(len\) 在 \(10^9\),时间复杂度会
阅读全文
摘要:设 \(dp_{i,j,S}\) 表示填了 \(i\) 位,在 AC 自动机上的 \(j\) 号节点,当前覆盖的字符串集位 \(S\) 的方案数。于是有转移: \[\large{dp_{i,j,S}\to dp_{i+1,tr_{j,k},S\operatorname{or}sta_{tr_{j,k
阅读全文
摘要:容易发现相交的区间是不会产生贡献的。于是不用考虑这个限制。 用单调栈可以求出以 \(a_i\) 为最小值和最大值的区间个数 \(qmn_i\) 和 \(qmx_i\)。 从小到大枚举第二个区间的最小值,记 \(p_i\) 表示 \(i\) 的位置,则对于 \(i\) 的答案即为: \[\sum_{j
阅读全文
摘要:\(k\le 20\),考虑 \(O(2^k)\) 暴力枚举加入的边。但是边数很大,时间复杂度很高无法承受。 考虑在一开始强制选这 \(k\) 条边,然后跑最小生成树,此时加入的边就是一定会加入的边。设这个边集为 \(S\)。 将 \(S\) 连接的连通块缩成点,点数为 \(O(k)\)。再在原图上
阅读全文
摘要:A. [COCI2009-2010#7] SVEMIR 显然 boruvka。将所有点分别按照 \(x\),\(y\),\(z\) 排序,更新最小边。时间复杂度 \(O(n\log^2 n)\)。 Code #include<cstdio> #include<iostream> #include<u
阅读全文
摘要:考虑初始的答案,显然为卡特兰数 \(H(n)\)。 考虑加入一对括号 \((l,r)\) 时对答案的贡献。(\((l,r)\) 表示有一对括号,左括号在 \(l\),右括号在 \(r\)。) 我们默认一开始有一对括号 \((0,n+1)\)。当出现一对括号 \((l,r)\) 时,首先要加上 \((
阅读全文
摘要:很巧的 trick。 首先离线。从大到小扫 \(l\),维护数组 \(p_i\) 表示当前出现 \(i\) 的最小的位置。 显然当确定了左端点,从左到右的 \(\operatorname{mex}\) 是单调不降的。因此我们要求的就是一段区间 \([l',r']\),满足 \(\operatorna
阅读全文