Height Queue (高さのキュー)

与えられたのは、n 人の人々が並んだキューで、それぞれの人の身長は正の整数で表されます。これに対して q 件のクエリを処理しなければなりません。クエリには2種類あり、いずれかの動作を行います:
  1. Print Shorter People (高さ d 以下の人を出力): キューの先頭から、身長が d 以下の人々をすべて取り除き、その高さを取り除いた順に出力する。
  1. Add Person (新しい人を追加): 身長 d の人をキューの末尾に追加する。
このクエリを効率的に処理するプログラムを作成してください。

入力

最初の行には、キューに最初から含まれる人数 n と、処理すべきクエリの数 q の 2 個の整数が与えられます (1 ≤ n, q ≤ 100 000)。
次の行には、n 個の整数 が与えられ、それぞれ はキューの i 番目の人の身長を表します (1 ≤ )。
続く q 行の各行にはクエリが書かれており、以下のいずれかの形式です:
  • 「pop x」: クエリの種類 1 に対応し、x は取り除く人の最大身長 (1 ≤ x ≤ )。
  • 「add x」: クエリの種類 2 に対応し、x は末尾に追加する人の身長 (1 ≤ x ≤ )。

出力

クエリの種類が 1(pop)のときには、取り除いた人々の身長を先頭から順にスペース区切りで 1 行に出力してください。
入力
出力
5 6 5 3 8 7 10 pop 5 add 4 pop 9 add 9 pop 2 pop 11
5 3 8 7 10 4 9

説明

最初のキューには、順に身長 5、3、8、7、10 の 5 人が並んでいます。これに対して行うクエリは 6 件で、順番は以下のとおりです:
  1. pop 5: キュー先頭の 2 人(身長 5 と 3)が 5 以下なので取り除かれ、出力に「5 3」が表示されます。
  1. add 4: 身長 4 の人がキューの末尾に追加されます。
  1. pop 9: キューの先頭にいる 2 人(身長 8 と 7)が 9 以下なので取り除かれ、「8 7」が出力されます。
  1. add 9: 身長 9 の人が末尾に追加されます。
  1. pop 2: キューの先頭にいる人々の身長はすべて 2 より大きいので、誰も取り除かれません。ここでは空行が出力されます。
  1. pop 11: キューに残っている人々全員(身長 10、4、9)が 11 以下なので、先頭から順に取り除かれて「10 4 9」が出力されます。
 

Constraints

Time limit: 3 seconds

Memory limit: 512 MB

Output limit: 10 MB

To check your solution you need to sign in
Sign in to continue