Queueueue

시간 제한2.5초메모리 제한1024 MB

요약
가운데 원소 하나를 공유하는 두 덱을 관리하며 13가지 큐 명령을 처리한다.
난이도

쉬움10점 중 3점

유형
큐, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

지금까지 세상에 존재하지 않았던 새로운 자료구조 Queueueue를 소개한다. 자료구조 Queueueue는 가로 Queue와 세로 Queue로 구성되어 있으며, 두 Queue가 십자가로 겹친 형태이다. 즉, 원소 1개에 대해서 중간 지점을 공유하고 있다. Queueueue의 정확한 정의는 다음과 같다.

  • 가로 Queue의 원소 개수를 n_hn\_h, 세로 Queue의 원소 개수를 n_vn\_v로 정의한다.
  • 가로 Queue의 ⌈n_h2⌉\left\lceil \frac{n\_h}{2} \right\rceil번째 원소와 세로 Queue의 ⌈n_v2⌉\left\lceil \frac{n\_v}{2} \right\rceil번째 원소는 서로 공유하는 같은 원소이다. 이 원소를 공유 원소라고 정의한다.
  • Queueueue는 명령을 수행하고 나서 매번 공유 원소를 새로 갱신한다.
  • 비어있는 Queueueue에는 공유 원소가 없다. 비어있는 Queueueue에 원소를 넣으면 그 원소가 공유 원소가 되며 n_h=1n\_h = 1, n_v=1n\_v = 1이다.
    • n_h=0n\_h = 0, n_v=0n\_v = 0인 경우를 제외하고 n_h×n_v=0n\_h \times n\_v = 0인 경우는 없다. 따라서 Queueueue가 비어있지 않다면 항상 n_h≥1n\_h \ge 1, n_v≥1n\_v \ge 1이다.

처음에 Queueueue는 비어있으며 Queueueue는 다음 13가지 명령을 할 수 있다.

  • hpush x : 가로 Queue의 맨 뒤에 정수 xx를 넣는다. (1≤x≤100,000)(1 \le x \le 100\\,000)
  • hpop : 가로 Queue에 정수가 있다면 맨 앞에 있는 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
  • hfront : 가로 Queue에 정수가 있다면 맨 앞에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.
  • hback : 가로 Queue에 정수가 있다면 맨 뒤에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.
  • hsize : 가로 Queue에 들어있는 정수의 개수를 출력한다.
  • vpush x : 세로 Queue의 맨 뒤에 정수 xx를 넣는다. (1≤x≤100,000)(1 \le x \le 100\\,000)
  • vpop : 세로 Queue에 정수가 있다면 맨 앞에 있는 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
  • vfront : 세로 Queue에 정수가 있다면 맨 앞에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.
  • vback : 세로 Queue에 정수가 있다면 맨 뒤에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.
  • vsize : 세로 Queue에 들어있는 정수의 개수를 출력한다.
  • size : Queueueue에 들어있는 정수의 개수를 출력한다.
  • empty : Queueueue가 비어있으면 1, 아니면 0을 출력한다.
  • middle : Queueueue에 정수가 있다면 Queueueue의 공유 원소에 해당하는 정수를 출력한다. 없다면 -1을 대신 출력한다.

입력

첫 번째 줄에 명령의 수 NN이 주어진다. (1≤N≤2,000,000)(1 \le N \le 2\\,000\\,000)

두 번째 줄부터 NN개의 줄에 걸쳐 명령이 하나씩 주어진다.

출력

출력을 요구하는 명령이 주어질 때마다, 명령의 결과를 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    33
    empty
    hpush 2
    vpush 3
    vfront
    empty
    hpush 4
    hfront
    vpush 1
    hpush 5
    middle
    vback
    hback
    vpush 6
    middle
    hsize
    vpop
    vfront
    hpop
    vsize
    hpop
    size
    hpop
    hpop
    vpop
    vpop
    size
    vfront
    hfront
    vback
    hback
    hpop
    size
    empty
    
    예상 출력
    1
    2
    0
    2
    4
    1
    5
    4
    3
    2
    4
    3
    3
    1
    3
    5
    4
    6
    -1
    0
    -1
    -1
    -1
    -1
    -1
    0
    1
    
  2. 예제 2

    입력
    33
    hpush 1
    vpush 2
    vpush 3
    vpop
    vpop
    vpop
    vpush 1
    vpush 2
    hpush 3
    vpop
    vpop
    hpush 4
    hpush 5
    vpush 6
    vpush 7
    hpop
    vpop
    hpop
    vpop
    hpop
    vpush 1
    vpush 2
    vpush 3
    vpush 4
    vpop
    hpush 5
    hpush 6
    hpop
    vpop
    hpop
    vpop
    hpop
    hpop
    
    예상 출력
    1
    2
    3
    1
    2
    3
    4
    6
    5
    7
    1
    3
    2
    5
    6
    4
    -1
    
  3. 예제 3

    입력
    33
    middle
    hpush 1
    middle
    vpush 2
    middle
    hpush 3
    middle
    vpush 4
    middle
    hpush 5
    middle
    vpush 6
    middle
    hpush 7
    middle
    vpush 8
    middle
    hpush 9
    middle
    vpush 10
    middle
    hpop
    middle
    hpop
    middle
    hpop
    middle
    hpop
    middle
    hpop
    middle
    hpop
    middle
    
    예상 출력
    -1
    1
    1
    1
    2
    3
    3
    3
    4
    5
    5
    2
    5
    4
    7
    5
    7
    7
    9
    9
    6
    6
    3