AtCoder Beginner Contest 257 C問題 Robot Takahashi
問題
提出解答
問題の概要
からなる長さ の文字列 と長さ の整数列が与えられる. 実数 に対して, を以下で定める時, を求めよ.
- 以下を満たす 以上 以下の整数 の個数を とする.
- 次のうち, 少なくとも (実はどちらか) 一方が成り立つ.
- かつ
- かつ
- 次のうち, 少なくとも (実はどちらか) 一方が成り立つ.
制約
- は からなる長さ の文字列
- 入力は全て整数
解法
今回, が整数であることから, 以下が成り立つ.
実際, 各 に対して, に対する寄与の有無は を堺にして変わるから, 上のような等式が成り立つ.
よって, 各 に対して, を高速に計算できれば良い.
であるような のみからなる の部分列と であるような のみからなる の部分列をそれぞれ とする. すると, は以下の和である.
- にある 未満の整数の個数
- にある 以上の整数の個数
は共に不変なので, 最初にソートしておくと, 二分探索によってこれらを各 に対して, 計算量 高速に求める事ができる.
以上から, を最初にソートしておくと, 各 に対して を 時間で計算できるので, 求めるべき最大値を 時間で計算できる.