DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

数列をなめらかに

問題に戻る

解説

答えを DDD 以下にできるかを判定することを考える。

元の値を変更せずに残す位置を i1<i2<⋯<imi_1<i_2<\cdots<i_mi1​<i2​<⋯<im​ とする。連続する 2 つの残す位置が i<ji<ji<j なら、

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

が必要である。この条件は十分でもある。両端の値の差が D(j−i)D(j-i)D(j−i) 以下なら、その間の変更する要素を、1 ステップごとの差が高々 DDD になるように整数で埋められる。先頭側と末尾側の変更区間も常に埋められる。

よって、元の値を少なくとも N−KN-KN−K 個残せるかを判定すればよい。

サブタスク 4: N≤2000N\le2000N≤2000

dpidp_idpi​ を、位置 iii を最後に残す位置としたとき、残せる元の値の個数の最大値とする。位置 iii とともに残せる前の位置 j<ij<ij<i を直接調べると、

dpi=1+max⁡1≤j<i∣Ai−Aj∣≤D(i−j)dpjdp_i=1+\max_{\substack{1\le j<i\\|A_i-A_j|\le D(i-j)}}dp_jdpi​=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 かどうかを確認する。1 回の判定は であり、二分探索と組み合わせると時間計算量は 、空間計算量は となる。

各位置 iii について

Xi=Ai−Di,Yi=Ai+DiX_i=A_i-Di,\qquad Y_i=A_i+DiXi​=Ai​−Di,Y

と定義する。i<ji<ji<j に対して、上の条件は

Xi≥Xj,Yi≤YjX_i\ge X_j,\qquad Y_i\le Y_jXi​≥Xj​,Yi​

と同値である。

点 (Xi,Yi)(X_i,Y_i)(Xi​,Yi​) を XiX_iXi​ の降順に並べ、 が等しい場合は の昇順に並べる。この順序で の最長非減少部分列の長さを とする。すると は同時に残せる元の要素数の最大値に等しい。

D>0D>0D>0 のとき Yi−Xi=2DiY_i-X_i=2DiYi​−Xi​= なので、2 つの座標条件を満たす点の順序は元の添字順序とも一致する。 のときは であり、 の降順に並べた後の非減少部分列に同時に入れる異なる位置は同じ値を持つ場合だけなので、やはり正しい。

したがって 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

)
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)