专栏文章

题解:CF2121H Ice Baby

CF2121H题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip24z22
此快照首次捕获于
2025/12/03 04:55
3 个月前
此快照最后确认于
2025/12/03 04:55
3 个月前
查看原文

我的做法

考虑对于每个数,它的选取只有两种情况
1.取lil_i
2.取和非严格递增子列中上一个数相同的值
dp[i]dp[i]为最后一个数为ii时子列的最大长度
用线段树维护这个dpdp数组
每加进来一个数,模拟这两种情况
1:将lil_i点的值变为[1,li][1,l_i]区间的最大值再+1
2:使所有lil_irir_i的值+1
答案统计:取最大值

官方解法

dpidp_i为长度为i的子列最后一项的最小值
dpidp_i一定单调不减,所以我们不管下标,直接拿multiset维护整个dp数组,最后dp数组的元素个数就等于最大长度
为方便说明,不妨设dp[i]dp[j]dp[i]-dp[j]恰好对应对于所有值在[li,ri][l_i,r_i]的dp值
首先,可以在这一位补一个和子列最后一个数相同的数,那么就相当于dp[i]dp[j]dp[i]-dp[j]转移为了dp[i+1]dp[j+1]dp[i + 1]-dp[j + 1]
需要把原来的dp[j+1]dp[j + 1]给删了用来“让位”
同时,这一位可以取lil_i放在dp[i1]dp[i - 1]的后面,把dp[i]dp[i]变为lil_i(因为原来的dp[i]dp[i]lil_i大所以这样一定更优)
至此,这一轮的乾坤大挪移就完成了

评论

0 条评论,欢迎与作者交流。

正在加载评论...