AtCoder Beginner Contest 240 D問題 Strange Balls
問題
提出解答
問題の概要
筒の中にボールを入れていく. 各ボールには 以上の整数が書かれている. と書かれたボールが筒の中で 個連続すると, その 個は消滅する.
番目には と書かれたボールを入れるとき, それぞれに対して, 番目のボールを入れた後に筒の中にあるボールの数を求めよ.
制約
解法
筒の中にあるボールの状況を で記録する. ただし, は と書かれたボールが ちょうど 個連続していることを意味する. また, が小さい方が先に入れたほうとする.
このとき, 以下のようにして正解を求めることができる.
- を空列とする.
- の順に以下を行う.
- が空でなく, ならば, に を加算する.
- (上記を満たさない場合) が空であるか, ならば, の末尾に を追加する.
- ならば, の末尾を取り除く.
- にある の総和が筒の中にあるボールの個数である.
ここで, 筒の中にあるボールの個数について, のボールを入れた場合, 個増え, その後消える可能性としてはこのときに入れたボールを含める と書かれたボール 個に限られる.
このことに注意し, Stack というデータ構造を利用することにより, 計算量 で求めることができる.