この問題において、「AA を反転させる」というクエリを愚直に処理していては実行制限時間に間に合いません。

そこで、両端キュー (deque) というデータ構造を用いることによって「AA を反転させる」というクエリを疑似的に処理することができます。

両端キューは、先頭、最後尾に要素を追加、削除を O(1)O(1) で行うことができます。

よって、1,21, 2 のクエリは以下のように言い換えることができます。

  • AA を反転させる」クエリを奇数回処理したとき:

    1 x : AA の先頭に xx を追加する。
    2 : AA の最後の要素を出力する。その後、その要素を削除する。

  • AA を反転させる」クエリを偶数回処理したとき:

    1 x : AA の最後尾に xx を追加する。
    2 : AA の最初の要素を出力する。その後、その要素を削除する。

結果として、この問題を O(Q)O(Q) で解くことができました。