20250731 做题记录
早上很快通过了 #19057. 交朋友。
调 #19058. 魔塔 一直到下午 16:00。
这个 T2 真神人了,我来写一个题解记录一下做法。当时倒闭了,没调出来。
考虑按顺序枚举 A 序列拿了多少。
现在希望知道,对于 B 序列,拿了 \(i\) 个,C 序列能最多拿多少。
那么对于修改:
-
如果这个元素只有 1 个,即 A 用了,BC 就都用不了。
此时 C 的这个元素的后面都不能用了,B 的这个元素后面也都不能用了。
因此把 B 的,从它开始的后缀,全部设为 \(-\infty\)。
然后把序列的所有元素都与 C 这一位前一位的和取 min。
-
如果这个元素有两个,那么 B 如果用了 C 就用不了了,B 要是不用的话,没有影响。
因此我们对于 B 的一段后缀,由于 C 用不了了,要与 C 这一位的前一位的和取 min。
此时我们需要维护 \(\max(B+C)\),其中 \(B\) 给定,\(C\) 单调递减,要支持后缀 check min。
二分到位置,改为区间推平。对于推平前的区间,max 是容易维护的。对于推平后的区间,由于 \(C\) 都一样,维护 \(\max(B)\) 即可。
下午四点通过了 #19058. 魔塔。
然后看了一整天的 T3,最后在第二天凌晨一点二十分通过了 #P13146. 星光交汇,并写了题解。

浙公网安备 33010602011771号