9.23
CF526 F Pudding Monsters
由于 \(x\) 和 \(y\) 均为 \(1\) 到 \(n\) 的排列,考虑按 \(y\) 递增排序,得到由 \(x\) 构成的排列。
设区间 \([l,r]\) 的最大值、最小值分别为 \(M,m\)。该区间合法,当且仅当
即
又因为区间中的数互不相同,所以恒有
因此,固定右端点 \(r\),以左端点 \(l\) 为线段树下标,维护
线段树维护区间最小值及其出现次数。由于 \(f_l\ge 0\),最小值为 \(0\) 时,其出现次数就是对应的合法区间数。
每次将右端点从 \(r\) 扩展到 \(r+1\):
- 对所有已有左端点,\(l-r\) 减少 \(1\)。
- 使用单调栈维护区间最大值和最小值的变化,将变化转化为区间加。
- 加入新的左端点 \(l=r+1\),其对应值为 \(0\)。
- 统计当前最小值为 \(0\) 的位置数,并累加到答案中。
P11236 [KTSC 2024 R 1] 水果游戏
首先观察:一段数无法完全合并,当且仅当其中出现了无法完全合并到两旁较小值的峰谷结构。
对于这样的峰谷,分别计算它向左部、右部合并时的贡献,并取最大值。
由于值域为 \(10\),区间两端尚未凑成峰的连续段长度至多为 \(10\)。中间部分的具体内容无需保留,因此可以维护足够精简的信息,支持线段树合并。
考虑用极大值分隔各个峰,并使用栈维护。每插入一个平台:
- 若处于峰谷中,设平台与两旁较小值的差为 \(d\),平台中元素的个数为 \(c\),则能够完全凑到该值的条件为 \(2^d\mid c\)。
- 若可以合并,则合并后重新入栈。
- 若无法合并,则分裂为两个峰。
- 其余情况直接插入。
在这一过程中,只需保留第一个峰和最后一个峰的具体信息,并维护转移中产生的最大值。
958. 【USsR #1 】彩色括号
将左括号 ( 看作 \(1\),右括号 ) 看作 \(-1\)。一个括号串合法,当且仅当:
- 整个序列的权值和为 \(0\);
- 任意前缀的权值和均不小于 \(0\)。
单个括号串的修改
将一个括号串修改为合法括号串,可以先处理总和:
- 若总和大于 \(0\),将尽量靠后的
(改成)。 - 若总和小于 \(0\),将尽量靠前的
)改成(。
总和归零后,若仍存在权值和小于 \(0\) 的前缀,则成对修改:
- 将尽量靠前的
)改成(; - 将尽量靠后的
(改成)。
这样既保持总和为 \(0\),又尽可能增加中间各个前缀的权值和。
三种颜色的总和限制
设红、绿、蓝三种颜色的括号权值和分别为 \(a,b,c\)。由题意,
因此,
所以,先对每种颜色分别进行上述总和归零的修改。
前缀限制与不等式展开
在完成总和归零后,定义:
- \(\operatorname{pre}_{i,j}\):前缀 \(j\) 内,颜色 \(i\) 的右括号数量;
- \(\operatorname{suf}_{i,j}\):前缀 \(j\) 外,颜色 \(i\) 的左括号数量;
- \(\operatorname{sum}_{i,j}\):前缀 \(j\) 内,颜色 \(i\) 的括号权值和;
- \(g_i\):颜色 \(i\) 后续进行的成对修改次数。
按“尽量靠前的右括号、尽量靠后的左括号”的方式修改,颜色 \(i\) 对前缀 \(j\) 的权值和增量为
因此,对于红绿括号串,需要满足
移项得
令
则限制可以写成
等价于
红蓝串、绿蓝串的限制同理。对所有前缀产生的不等式取交,即可得到修改次数的可行范围,并在其中最小化
每次成对修改会翻转两个括号,因此这一阶段的修改代价为

浙公网安备 33010602011771号