AtCoder Beginner Contest 222 D 問題 Between Two Arrays
問題
提出解答
問題の概要
以下の条件をすべて満たす長さ の整数列 の個数を求めよ.
- は広義単調増加である.
- に対して, が成り立つ.
制約
- は共に広義単調増加列
解法
の順に決めることにすると, のときに, どのような値が可能かは のみによって決まる. よって, 末項が同じ列はまとめて数え上げることができる.
とする. に対して, ] を ,
- のときは, 便宜的に以下のようにする.
- のとき, ] を求める. 末項を にするためには でなくてはならない. また, という条件に注意すると,
である. この漸化式を愚直に計算しようとすると, 要素数が で, 更新式が なので, 全体で となり間に合わない.
しかし, 更新の結果が か, ] という形の式になっていることから, 以下のような配列 を用意する.
このとき, という関係式に注意すると, を で求められ,
という更新式で, 各要素を で求められる.
よって, を利用することにより, ] を計算量 で求めることができ, ] が求めるべき答えである.