2026.7.11

挂分总结

期望:100 + 100 + 0 + 0

实际:5 + 80 + 0 + 15

t1 忘记了从 \(0\) 开始的。t2 的 >= 写了个 >。挂分挂惨了。/ll/ll/ll/ll/ll

T1

对于回文序列,我们将相对应的位置用点对表示,那么位置在 1 3 5 8 的回文序列就可以被表示为 \((1, 8), (3, 5)\),我们按照第一个值从小到大排序,不难发现是个下降子序列,由于题目要求求最长,那么实际上就是求对于点对的 LIS。我们可以预处理出所有这样的点对,由于 \(a\) 完全随机,那么对于 \((u, v)\) 其中 \(a_u = a_v\) 的点对期望 \(n\) 个,预处理出所有的然后求最长下降子序列即可。

code

T2

首先答案具有单调性,不难想到二分。对于 check 我们发现是可以 dp 的。我们设我们二分到的答案为 \(mid\),那么只要存在一种方案使得长度 \(\ge mid\) 的短的个数有 \(k\) 个那么就说明 \(mid\) 是合法的。设 \(dp_{i, j}\) 表示前 \(i\) 个有 \(k\) 个连续 \(1\) 的段长度 \(\ge mid\),那么显然有转移:

\[dp_{i, j} = \begin{cases} \min(dp_{i - 1, j}, dp_{0, j - 1} + i - sum) \qquad l = 0 \\ \min(dp_{i - 1, j}, dp_{l - 1, j - 1} + (i - l) - (sum_i - sum_l)) \qquad l \ne 0 \end{cases} \]

其中 \(l = lst_{i - mid}\)\(lst_i\) 表示最大的 \(j \in [1, i]\) 使得 \(s_j = 0\),是好预处理的。那么当 \(dp_{n, k} \le m\) 时显然 \(mid\) 合法。做完了。

code

T3

lazytag.(其实是不会决策单调性)

t4

感觉不难的啊。

为了方便假设是从第最开始在第一个位置,一个一个超到最前面,即下面的 \(a\) 都是翻转过后的,我们假设最开始在 \(1\) 要超到 \(n + 1\) 的位置。首先有一个性质,从 \(i\) 超到 \(n\) 时每次超的 \(a_i\) 单调不增,贪心可以证明。我们考虑 \(dp_i\) 表示 \(i \rightarrow n + 1\) 的最小代价。对于转移,我们从后往前,我们设超了 \([i - 1, j]\) 到了 \(i\) 的位置且超的人都是一个人,我们发现如果只考虑两个端点既可以涵盖所有的方案。先考虑左端点,显然有贡献 \(dp_{j} + j - i - 1 + (j - i) \times a_j\),若为右端点,应为 \(dp_j + 2 (j - i) + (j - i) \times a_j\),那么总结一下有:

\[dp_i = \min_{j = 1} ^ {i - 1} \{\min(dp_{j} + j - i - 1 + (j - i) \times a_j, dp_j + 2 (j - i) + (j - i) \times a_j)\} \]

这样直接做是 \(O(n ^ 2)\) 的。我们发现两个转移都形如一次函数,那么拆开可以用斜率优化做到 \(O(n \log n)\)。做完了,倒序输出 \(dp\) 即可。

code

posted @ 2026-07-11 22:20  ACehomoxue  阅读(18)  评论(0)    收藏  举报