AtCoder Beginner Contest 273 E問題 Notebook
問題
提出解答
問題の概要
空数列 と長さ の整数列の列 がある. の各項は空列である.
次の 個のクエリを順に処理せよ.
- : の末尾に を加える.
- : の末尾を削除する. ただし, が空列の場合は何もしない.
- :
- :
各クエリ終了後における の末尾を求めよ. なお, が空列だった場合は とする.
制約
解法
の履歴を木で考えることにする.
次のように考える.
- 頂点 にマーカー がある. また, ポインタが頂点 にある. また, 頂点 に整数 を書き込む.
- 各クエリごとに次のように処理する.
- : 今いる頂点を親に持つ子を1つ生成する. 子には整数 を書き込み, ポインタを子に移動させる.
- : 今いる頂点が でなければ, ポインタを親に移動させる.
- : マーカー を今ポインタがいる頂点に移動させる.
- : ポインタをマーカー がある頂点に異動させる.
- ポインタがある頂点に書かれている整数が末尾の項 (空列の場合にはポインタが根にあるので, そこに書き込まれている整数は であるから, 実は空列の場合も場合分けの必要がなくなる).
これにより, 計算量 時間で解くことが出来る.