摘要: 读完题,我们能很容易想到,可以将所有的操作看作是在一棵状态树上进行。操作一相当于直接把当前商店的指针指向已有的状态;操作二和操作三相当于在当前状态下衍生出一个新的子状态,并在树上连边。这样能够得到一棵状态树,每个商店在任何时刻都对应树上的一个节点。对这棵树进行深度优先遍历,得到每个节点的入栈和出栈时 阅读全文
posted @ 2026-11-11 15:10 xuyifei0302 阅读(4) 评论(0) 推荐(0)
摘要: 每次操作 \((x, y)\) 表示将序列前 \(x\) 个数加上 \(y\)。我们可以将问题转化,序列在最终时刻位置 \(p\) 的值为这 \(r - l + 1\) 次操作中,满足 \(x_i \ge p\) 的所有 \(y_i\) 的和。也就是说,我们需要对所有的 \(p\),求出 \(\su 阅读全文
posted @ 2026-11-11 15:10 xuyifei0302 阅读(3) 评论(0) 推荐(0)
摘要: 每次操作 \((x, y)\) 表示将序列前 \(x\) 个数加上 \(y\)。我们可以将问题转化,序列在最终时刻位置 \(p\) 的值为这 \(r - l + 1\) 次操作中,满足 \(x_i \ge p\) 的所有 \(y_i\) 的和。也就是说,我们需要对所有的 \(p\),求出 \(\su 阅读全文
posted @ 2026-11-11 15:10 xuyifei0302 阅读(1) 评论(0) 推荐(0)
摘要: 我们可以先把半开区间 \([l, r)\) 变成闭区间 \([l, r-1]\),坐标范围相应变成 \([1, n-1]\)。把操作离线下来,每个插入的区间就变成了一个带存在时间范围 \([s, e]\) 的静态区间。如果一直没被删,结束时间就是 \(m\)。 遇到询问 \((l, r, t)\) 阅读全文
posted @ 2026-11-11 15:10 xuyifei0302 阅读(4) 评论(0) 推荐(0)
摘要: 原图由一条长度为 \(n - 1\) 的链和若干条额外边构成。将点 \(i\) 与 \(i + 1\) 之间的原始边称为树边,编号为 \(i\)(\(1 \le i < n\)),新加入的边称为非树边。每条非树边 \((u, v)\)(设 \(u < v\))覆盖了树边区间 \([u, v - 1] 阅读全文
posted @ 2026-11-11 15:09 xuyifei0302 阅读(3) 评论(0) 推荐(0)
摘要: 闲话:本来想写树套树的来着,后来在优化的过程中整出来的。 我们考虑题目中海狸移动的本质。由于树上的单向道路均指向父亲节点,任意海狸的所有迁移操作都只能沿着通往根节点的路径向上进行。因此,一只出生在城市 \(A\) 的海狸,无论经历多少次迁移,其在任意时刻所处的位置必然是 \(A\) 的某个祖先。特别 阅读全文
posted @ 2026-11-11 15:09 xuyifei0302 阅读(3) 评论(0) 推荐(0)
摘要: 我们发现整个序列中极小 MEX 区间的总数仅为 \(\mathcal{O}(n)\) 个。我们枚举区间的左端点位置 \(l\),令 \(t = v_l\)。设 \(nxt_x\) 为从位置 \(l\) 开始,数字 \(x\) 的第一次出现位置;并设 \(T\) 为数字 \(t\) 在位置 \(l\) 阅读全文
posted @ 2026-11-11 15:09 xuyifei0302 阅读(3) 评论(0) 推荐(0)
摘要: 将总天数划分为若干连续区间,每一段区间所获得的经验值等于该区间内经验值的前缀和之差。对于一段经验值为 \(v\) 的区间,其贡献为可以升到的最高等级减去惩罚常数 \(c\)。 设 \(dp_i\) 表示前 \(i\) 天所能获得的最大净收益,显然有动态规划转移方程: \(dp_i = \max_{0 阅读全文
posted @ 2026-10-26 20:54 xuyifei0302 阅读(4) 评论(0) 推荐(0)
摘要: 问题的本质是求 \(n\) 阶闪现树在各个深度的节点总数。我们可以按照深度从上到下推进,将每一层的节点划分为两类:一类是仍可继续向下裂变延申的可生长叶子节点,另一类是已经固定不再生长的终止节点,包括内部非叶子节点,以及已经停止延申的叶子节点。 根据一阶闪现树的构造,当一个处于当前深度的叶子节点向下延 阅读全文
posted @ 2026-10-26 20:54 xuyifei0302 阅读(5) 评论(0) 推荐(0)
摘要: 由于指令只有向左移动一格的 \(h\)、向右跳到指定字符的 \(f\) 以及原地删除的 \(x\),我们无法直接用 \(f\) 指令落在字符 \(e\) 上。因此,删除每个 \(e\) 的过程必然是从其右侧的某个位置向左使用 \(h\) 移动到该位置,并使用 \(x\) 删除。每个字符 \(e\) 阅读全文
posted @ 2026-10-26 20:54 xuyifei0302 阅读(6) 评论(0) 推荐(0)