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. 星光交汇,并写了题解。

posted @ 2025-07-31 15:17  Air_CoIor5  阅读(4)  评论(0)    收藏  举报