A
略。
B
略。
C
很典型的贪心。我们给两个序列降排序后,对每一个身体找到第一个小于它的头部。
D
另一个很典型的贪心。我们先钦定所有部件安装在身体,然后把总重量小于等于 \(\lfloor \dfrac{m}{2} \rfloor\) 的部件移到头部。
这是可以用背包简单实现的。
E
很典型的 01bfs 求最短路。
当然也可以直接图论建模,比如每一个点可以开四个点来接受四个方向来的点。然后直接跑 dj。
F
AGC036F 的超级弱化版。
因为限制条件类似偏序,所以我们先给 \(A\) 排序。然后很明显 \(A_i\) 在 \(B\) 中前一个数 \(A_j\) 应该满足 \(j \in [1,r_i]\),\(r_i\) 是最大满足 \(A_j \le A_i+d\) 的 \(j\),可以通过二分简单得到。
然后这就类似在棋盘上摆车,使车不能互相攻击(因为每一个数只有唯一的下一个数)。但是因为数是有重复的,所以我们要去重,之后存在转移:
其中 \(cnt_{a_i}\) 是 \(a_i\) 的出现次数,\(pre\) 是小于 \(a_i\) 的数的个数,总量是 \(r_i-pre+1\) 是因为之前已经有 \(pre\) 个数进行了选取,它们占用的数我们不能再占用了。
G
首先,我们发现 \(f(l,r)\) 与 \(A\) 的大小关系和 \(A_l\) 与 \(A_r\) 的大小关系相反。
然后,我们可以只讨论 \(A_l < A_r\) 的情况,因为另一种情况可以将序列所有字符取反(被 \(N+1\) 减掉后得到的结果)。
接下来,我们有一个发现: \(f(l_1,r_1)\) 与 \(f(l_2,r_2)\) 的大小关系和 \((l_1,A_{r_1},-r_1)\) 与 \((l_2,A_{r_2},-r_2)\) 的大小关系相同。
证明是不难的,详见官解。
接下来就是数据结构高光时刻。