DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

平滑数列

返回题目

题解

考虑判定答案是否可以不超过 DDD。

设保留原值的位置为 i1<i2<⋯<imi_1<i_2<\cdots<i_mi1​<i2​<⋯<im​。如果相邻的两个保留位置为 i<ji<ji<j,则必须满足

∣Ai−Aj∣≤D(j−i).|A_i-A_j| \le D(j-i).∣Ai​−Aj​∣≤D(j−

这个条件也是充分的。当两个端点的差不超过 D(j−i)D(j-i)D(j−i) 时,可以用整数填充它们之间被修改的位置,使每相邻一步的变化都不超过 DDD。开头和结尾处被修改的连续区间也总能填充。

因此,只需判断能否保留至少 N−KN-KN−K 个原值。

子任务 4:N≤2000N\le2000N≤2000

设 dpidp_idpi​ 表示以位置 iii 为最后一个保留位置时,最多能保留多少个原值。直接检查前面的哪些位置 j<ij<ij<i 可以与 iii 一起保留,可得

dpi=1+max⁡1≤j<i∣Ai−Aj∣≤D(i−j)dpj.dp_i=1+\max_{\substack{1\le j<i\\|A_i-A_j|\le D(i-j)}}dp_j.dpi​=1+

如果没有满足条件的 jjj,则将最大值视为 000。

按 i=1,2,…,Ni=1,2,\ldots,Ni=1,2,…,N 的顺序计算,并检查是否有 max⁡idpi≥N−K\max_i dp_i\ge N-Kmaxi​dp。一次判定需要 时间,结合二分查找后,时间复杂度为 ,空间复杂度为 。

对每个位置 iii 定义

Xi=Ai−Di,Yi=Ai+Di.X_i=A_i-Di,\qquad Y_i=A_i+Di.Xi​=Ai​−Di,Y

对于 i<ji<ji<j,上述条件等价于

Xi≥Xj,Yi≤Yj.X_i\ge X_j,\qquad Y_i\le Y_j.Xi​≥Xj​,Yi​

把点 (Xi,Yi)(X_i,Y_i)(Xi​,Yi​) 按 XiX_iXi​ 降序排序,若 相同则按 升序排序。设在这个顺序中, 的最长非递减子序列长度为 。那么 恰好等于能够同时保留的原序列元素的最大数量。

当 D>0D>0D>0 时,因为 Yi−Xi=2DiY_i-X_i=2DiYi​−Xi​=,满足两个坐标不等式的点的顺序也与原下标顺序一致。当 时,;在按 降序排序后,一个非递减子序列只有在数值相等时才能同时包含多个点,因此结论仍然成立。

所以,当且仅当 L≥N−KL\ge N-KL≥N−K 时,DDD 可行。使用 upper_bound 可以在 O(Nlog⁡N)O(N\log N)O(NlogN) 时间内求出最长非递减子序列。

可行性关于 DDD 单调,因此在 000 到原序列最大相邻差之间二分答案。总时间复杂度为 O(Nlog⁡Nlog⁡C)O(N\log N\log C)O(NlogNlogC),其中 C≤2⋅109C\le 2\cdot 10^9C≤;空间复杂度为 。

Solution written by GPT6

i
)
.
1≤j<i∣Ai​−Aj​∣≤D(i−j)​
max
​
d
pj​
.
i
​
≥
N−
K
O(N2)O(N^2)O(N2)
O(N2log⁡C)O(N^2\log C)O(N2logC)
O(N)O(N)O(N)
i​
=
Ai​+
Di.
≤
Yj​.
XiX_iXi​
YiY_iYi​
YiY_iYi​
LLL
LLL
2Di
D=0D=0D=0
Xi=Yi=AiX_i=Y_i=A_iXi​=Yi​=Ai​
XXX
2⋅
109
O(N)O(N)O(N)