AtCoder Beginner Contest 231 C 問題 Counting 2
問題
提出解答
解答1 (二分探索)
解答2 (クエリ先読み)
問題の概要
正の整数の列 が与えられる. それぞれに対して, 以下の問に答えよ.
- の要素のうち, 以上の要素はいくつか?
制約
- 入力はすべて整数
解法
解法1 (二分探索)
を降順にソートしたものを とする. このとき, 任意の実数 に対して, となる整数 が存在する (ただし, とする). ここで, にある 以上の要素は, がソート済みなので, 個であることがわかる.
よって, この を求める問題に帰着できた. この は, 二分探索というもので長さ の列に対して, 計算量 という非常に高速に求めることができる.
以上の方針を それぞれに対して実行することで, 計算量 で求めることができる.
解法2 (クエリ先読み)
長さ の列 を
とし, を辞書式の意味で昇順に並べた列を とする. このとき, 以下のようにして求めることができる.
- とする.
- に対して, 以下を順に実行する.
- の場合, を 減らす.
- の場合, 第 問目の答えは である.
- の順に, 第 問目の答えを出力する.
計算量は である.