Ucup final 和 ARC

讲题

Posted by WrongAnswer_90's Blog on February 24, 2025

Problem J. Divide the String

看成有一个序列 $a$,要选择一个子序列,满足相邻两项的大小关系满足 $t$ 的限制。

考虑如果 $t$ 是全 $1$ 串,要求的是最长上升子序列,这提醒我们把相同的段缩起来。

考虑第一个段,假设是全 $1$ 段,考虑求出第一个位置 $i$ 满足 $[1,i]$ 的 LIS 长度为 $t$ 种这个极长 $1$ 段的长度。然后真实的合法位置是 $(i,a_i)$ 的右上角区域内的所有点,这个可以弱化成 $i$ 右侧因为选 $i$ 右下的点一定不优。所以就是要划分成若干段,使得每段的 LIS 或者 LDS 长度大于等于某个值,贪心可以解决。因为题目性质,$\lvert a_i-a_{i+1}\rvert =1$,所以 LIS 和 LDS 可以线性求。

Problem C. Longest Increasing Subsequence

首先一个很聪明的构造是 $b$ 递减,这样两个 LIS 都至多是原 LIS 加一。

如果合法就直接赢了,否则考虑如果右边没有加一,左边加一了(另一种情况可以通过 reverse 来变成这种情况)。那可以证明一定是翻转 $b$ 的一个前缀最优,因为如果不是一个前缀,设其最后拼到 $a$ 后面的 LIS 序列长度是 $len$,则取 $b$ 的 $[1,len]$ 翻转更优,这样从前向后扫一下即可。

Problem L. Not Another Constructive Problem

先考虑给了一棵树之后如何判定。对于一个数字 $i$,找到 $i$ 和其目标位置 $p_i$,那这条链上的限制形如:对于相邻两条边 $(x,y),(y,z)$,满足操作了 $(x,y)$ 之后,$y$ 旁边操作的第一条边需要是 $(y,z)$。

Problem F. World of Rains