AtCoder Beginner Contest 225 D 問題 Play Train
問題
提出解答
問題の概要
両の電車のおもちゃがあり, 前後を (高々1個) 連結できる. 以下の 個のクエリを順に処理せよ.
- Type 1: 電車 の後ろと電車 の前を連結させる.
- Type 2: 電車 の後ろと電車 の前を分離する.
- Type 3: 電車 が含まれる連結成分について, 電車の番号を前から出力する.
制約
- Type 1,2 において, 整合性を持つようにクエリが与えられる.
- Type 3 において出力すべき整数は 個のクエリを通して 個以下である.
解法
各電車について, その電車の直前 (直後) に電車は連結しているか? しているならば, それはどの電車か? という情報を記録すれば高速にクエリ処理できる. 実際には, で直前, 直後に連結している電車の番号 (存在しない場合は ) とすると,
- Type 1: とする.
- Type 2: とする.
Type 3 についても, が属する連結成分の先頭 を を見て,更新し続けることを繰り替えすことで決定し, を見て, 更新し続けるということを繰り返せばよい.
Type 3 において出力すべき整数は 個のクエリを通して 個以下である. から, 見て, 更新するという操作は高々 回で住済む.