AtCoder Beginner Contest 221 E問題 LEQ
問題
提出解答
問題の概要
長さ の整数列 の連続するとは限らない部分列のうち, 以下を全て満たすのはいくつか?
- 長さ 以上
- 部分列の初項は末項以下である.
制約
解法
まず, 条件は整数の大小が重要であり, 値そのものが重要というわけではないので, 列 の各要素の大小関係が変わらない範囲で変換しても構わない. そこで, 以下では の代わりに の座標圧縮による変換した列を とする.
で 以下の正の整数全体の集合とし, を
とする. このとき,
- であるとき, 項目を初項, 項目を末項とする部分列は全て条件を満たす.
- 項目を初項, 項目を末項とする部分列は全て である.
よって, 求めるべき解答 は
である.
ここで, のとる範囲において, を固定して考える. つまり,
とする. このとき, である.
を求める際に, は定数であることから,
となり, 当然ながら, のときに, は の値に依らないことから, 以下のようにして全ての を求める事ができる.
- とする (ただし, , つまり, にある整数の種類数).
- の順に以下を実行する.
- である.
- に を加算する.
ここで, に を加算したあとの はそれぞれ, を満たす 全てにおける の総和である.
このとき, においては1点加算及び, 区間和の取得が必要であり, 区間和の演算は群を成すことから, BIT 木で管理できる.
よって, 計算量 で を求められることと, であったので, 全体の計算量 で正解を求めることができる.