C17 - Strange Data Structure? Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MB

配点: 1000

問題文

あなたはアトラクションの行列を管理しています。最初、行列には誰も並んでいません。これから Q 個のクエリを処理する必要があります。各クエリは以下の 4 種類のいずれかです。

  • タイプ A: 文字列 X_i が与えられ、行列の最後尾に名前が X_i である人が入る。
  • タイプ B: 文字列 X_i が与えられ、行列の中央に名前が X_i である人が入る。
  • タイプ C: 行列の先頭にいる人が列から抜ける。
  • タイプ D: 行列の先頭にいる人の名前を答える。

ただし、タイプ B のクエリでは、行列に並んでいる人が n 人であるとき、n が奇数のときは先頭から (n+1)/2 人目の後ろに、n が偶数のときは先頭から n/2 人目の後ろに入るものとします(特に n = 0 の場合は、行列の最後尾に入ることになります)。

すべてのクエリを順番に処理し、与えられるタイプ D のクエリに正しく答えるプログラムを作成してください。

注意

この問題では実行時間制限に間に合えば正解 (AC) とはなりますが、計算量 O(Q) で解いてみましょう。

制約

  • 2 \leq Q \leq 300000
  • i 個目のクエリがタイプ A, B のとき、X_i は英小文字からなる 10 文字以下の文字列
  • 行列に誰も並んでいない状態でタイプ C, D のクエリが行われることはない
  • タイプ D のクエリは 1 回以上行われる

入力

入力は以下の形式で標準入力から与えられます。

Q
Query_1
Query_2
 \vdots
Query_Q

ただし、Query_ii 番目のクエリの情報を指します。各タイプについて以下の形式で与えられます。

タイプ A のとき

A X_i

タイプ B のとき

B X_i

タイプ C のとき

C

タイプ D のとき

D

出力

タイプ D のクエリが来るたびに、行列の先頭ににいる人の名前を 1 行ずつ出力してください。


入力例 1

6
A kyopuro
A tessoku
B book
D
C
D

出力例 1

kyopuro
book

各クエリとその結果は以下のようになります。

何番目 クエリ 説明 行列
1 A kyopuro 行列の末尾に kyopuro さんが入る [ "kyopuro" ]
2 A tessoku 行列の末尾に tessoku さんが入る [ "kyopuro", "tessoku" ]
3 B book 行列の中央に book さんが入る [ "kyopuro", "book", "tessoku" ]
4 D 行列の先頭の人の名前を答える kyopuro と出力する)
5 C 行列の先頭の人が列から抜ける [ "book", "tessoku" ]
6 D 行列の先頭の人の名前を答える book と出力する)

したがって、1 行目に kyopuro2 行目に book と出力します。


入力例 2

15
B prefixsum
B binsearch
A dp
B math
C
D
C
D
B heuristics
B ds
B graph
C
D
C
D

出力例 2

binsearch
math
heuristics
graph