01 2025 档案
摘要:圆方树 前置知识: 点双 引入 通常来说, 树具有十分优良的性质, 可以通过许多数据结构来维护它. 但是对于一般的图则不具备一些性质, 所以我们考虑将一般图放在树上进行考虑. 如标题所见, 圆方树便是一种将图转化成树的方法. 定义 圆方树最初是用于处理「仙人掌图」(即每一条边在不超过一个简单环) 的
阅读全文
摘要:原题链接 题意 给定 \(n, k\), 求有多少个数组 \(a\), 使得 \(\displaystyle 1 \le |a| \le n, 1 \le a_i \le k, \prod_{i = 1}^{|a|} = x\), 其中 \(x \in [1, k]\). 算法 动态规划, 组合数
阅读全文
摘要:题面 T1 算法 动态规划, 树状数组. 思路 发现原问题其实就是一个二维偏序问题, 所以可以先按原串字典序排序消去一维的限制. 令 \(f_i\) 表示从 \(1 \sim i\) 钦定选第 \(i\) 个的最大答案, 那么有转移方程 \(\displaystyle f_i = \max_{j <
阅读全文
摘要:题面 & 题解 T1 思路 通过打表可以发现, 当我们在最前方放 \(k - 1\) 个 \(1\), 再在后面一堆 \(0\) 的中间放一个 \(1\) 一定是最优的. 严格证明一下. 将数组做前缀和, 令前缀和中 \(1\) 的个数为 \(X\), \(0\) 的个数为 \(Y\), 那么答案即
阅读全文
摘要:题面 & 题解 T1 原题链接, 感觉没有紫. 算法 树状数组, 数学. 思路 若对于每一个矩形来考虑, 我们需要 \(\mathcal{O}(n^4)\) 地枚举每一个矩形, 没有太大的优化前途. 换个角度, 我们对于每一个点依次进行考虑. 如果该点是作为一个子集的一个元素, 那么这样的子集一共会
阅读全文
摘要:左偏树 概念 左偏树是一种常用可并堆, 可以在 \(\mathcal{O}(\log n)\) 的时间内合并两个堆. 可并堆顾名思义, 是指除了堆的普通操作, 还支持合并的堆. 有如配对堆, 二项堆, 斐波那契堆等等. 相关定义 外节点: 子节点数小于两个的节点, 即左右儿子至少有一个为空的节点.
阅读全文
摘要:题面 & 题解 T1 思路 首先可以处理出每对括号的位置. 考虑怎么处理每对括号. 对于相邻的几对括号中的任意一对, 它可以选择的方案数为 \((左侧对数 + 1) \times (右侧对数 + 1)\). 那么我们只需要从左到右扫一遍, 记录一下每个连通块内的括号数量即可. 在实现上, 因为需要做
阅读全文
摘要:[NOI2007] 货币兑换 算法 动态规划, 斜率优化, 李超线段树. 思路 注意到题末有两行小字: 必然存在一种最优的买卖方案满足: 每次买进操作使用完所有的人民币, 每次卖出操作卖出所有的金券. 考虑动态规划, 令 \(f_i\) 表示到第 \(i\) 天时最多拥有 \(f_i\) 元钱, 钦
阅读全文
摘要:题面 & 题解 T2 算法 动态规划, 博弈论. 思路 假设梦梦不能操作, 我们可以用动态规划求出前后缀的最大子段和, 这是 \(\mathcal{O}(n)\) 的. 具体来说, 令 \(pre_i\) 表示以 \(i\) 结尾的最大子段和, \(premx_i\) 表示 \([1, i]\)
阅读全文
摘要:李超线段树 引入 【模板】李超线段树 题目描述 要求在平面直角坐标系下维护两个操作: 在平面上加入一条线段. 记第 \(i\) 条被插入的线段的标号为 \(i\). 给定一个数 \(k\), 询问与直线 \(x = k\) 相交的线段中, 交点纵坐标最大的线段的编号. 强制在线. 我们发现, 传统线
阅读全文
摘要:斜率优化 例题引入 & 概念 [[HNOI2008] 玩具装箱]([P3195 HNOI2008] 玩具装箱 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)) 朴素 DP 令 \(f_i\) 表示枚举到第 \(i\) 个物品, 分成若干段的最小代价. 设 \(\textrm{sum
阅读全文
摘要:题面 & 题解 T1 做题做少了导致的. 算法 并查集, 组合数学. 思路 首先考虑什么情况下答案一定是 0: 若对于第 \(i\) 列和第 \(n - i - 1\) 列的和 \(> 2\), 那么就一定无解. 在分类讨论下: 第 \(i\) 列和第 \(n - i - 1\) 列的和 \(\le
阅读全文
摘要:子集反演 对于两个集合的函数 \(f_S, g_S\): \[f(S) = \sum_{T \subseteq S} g(T) \iff g(S) = \sum_{T \subseteq S} (-1)^{\lvert S \rvert - \lvert T \rvert} f(T) \]\(\tt
阅读全文
摘要:算法 子集反演, 容斥原理, DP. \(\tt{Solution}\) 考虑暴力状压, 令 \(f_{i, \mathbb{S}}\) 表示枚举到第 \(i\) 个箱子时, 至少放了一次玩具构成的集合为 \(\mathbb{S}\) 的方案数. 转移时枚举第 \(i\) 个箱子取不取即可. 想法很
阅读全文
摘要:题目大意 给定 \(1 \le n \le 2 \times 10^5\) 以及一个序列 \(a\). 现在有 \(1 \le q \le 2 \times 10^5\) 次修改, 每次将 \(a_p \gets x\), 你需要最大化下面的式子: \[f(l, r) = \max^r_{i = l
阅读全文
摘要:原题链接 效率异常低下. \(\tt{Solution}\) 先考虑一下 easy version. 观察到 \(nq \le 10^5\), 所以对于每一次询问, 我们可以按位来进行贪心. 从 \(2^{59}\) 一直遍历到 \(2^0\), 考虑当前位 \(2^i\) 是否能够出现. 我们可以
阅读全文
摘要:前置知识 高维前缀和, 状压 DP. 高维前缀和 前缀和可以简单理解为「数列的前 \(n\) 项的和」, 是一种重要的预处理方式, 能大大降低查询的时间复杂度. -- OI Wiki 二维 / 多维前缀和 常见的多维前缀和的求解方式有两种: 基于容斥原理, 时间复杂度 \(\mathcal{O}(2
阅读全文
摘要:题目链接: https://files.cnblogs.com/files/blogs/833333/CW1018.zip?t=1729247210&download=true T2 区间 原区间范围很大, 考虑离散化. 显然, 产生贡献的情况在离散化后, 分成一块一块的. 对于所有区间的左右端点离
阅读全文
摘要:前言 一道分块打表练习题. 受这篇日报的启发, 有了这篇题解. 因为交上去的程序运行时间有严格限制, 但是本机运行则时间可以很长. 所以提前用本机算出所有可能的数据的答案, 拷贝到代码里, 交上去的程序只用查表就能得到答案. ——浅谈打表与其技巧 思路 对于这道题, 判断每一个数是否合法的复杂度并不
阅读全文
摘要:随机跳题跳到的. 题目大意 有一个 \((2n + 1) \times (2n + 1)\) 的棋盘, 有一个白棋在 \((0, n)\). 当白棋在 \((i, j)\) 时你可以进行以下操作: 如果 \((i + 1, j)\) 没有黑棋, 你可以走到那. 如果 \((i + 1, j - 1)
阅读全文
摘要:题面 & 题解 T1 算法 贪心, 数学, 高精度. 思路 根据贪心, 对于两个数 \(A, B\), 我们一定会从高位到低位从大到小地填数. 考虑填法, 设 \(A\) 的前缀为 \(a\), \(B\) 的前缀为 \(b\), 将要填入的数为 \(c\). 如果将其填入 \(A\), 那么答案为
阅读全文
摘要:算法 计算几何, 容斥原理. 思路 首先考虑一个很简单的暴力, 我们枚举每个三角形的三个顶点, 然后枚举每一个点并且判断其是否在三角形内, 时间复杂度 \(\mathcal{O}(n^4)\). 然后就没有思路了, 看了下题解, 发现可以使用容斥进行优化. 如上图, 将每个点投影到 x 轴上, 那么
阅读全文