AtCoder Beginner Contest 281 E問題 Least Elements
問題
提出解答
問題の概要
個の整数 が与えられる. について以下の問題を解け.
- 個の整数 を昇順に並べたとき, 先頭 個の総和を求めよ.
制約
解法
の昇順 番以内と の昇順 番以内に選ばれる整数の違いは高々2個である. このことを利用し, の答えから の答えを高速に求めることにする.
次のようにして求める.
- の時の解答を とする.
- をソートを利用して求める.
- 多重集合 を用意する. この は昇順 番以内, はそれ以外の要素を管理する要素である.
- の順に以下を行う.
- ならば, から を削除し, そうでないならば から を削除する.
- ならば, に を挿入し, そうでないならば から を追加する.
- ならば, 「 の最大値を に移動させる」または「 の最小値を に移動させる」を行い, になるようにする (この操作はどちらか1回のみで済む).
- は に の差分を加算した値である.
順序つき集合を利用することによって, を 時間で求めることができる.