만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

막대 쌓기

면접 대비

시간 제한1초메모리 제한512 MB

요약
가로 1x4 블록과 세로 4x1 블록을 주어진 x좌표에 떨어뜨리고, 특정 x좌표에서 가장 높은 y좌표를 구하는 문제입니다.
난이도

보통10점 중 5점

유형
세그먼트 트리, 정렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

사토리는 가로로 긴 1×41 \times 4 블록과 세로로 긴 4×14 \times 1 블록을 쌓는 놀이를 하고 있다. 블록이 떨어질 위치를 고르면 블록은 그대로 수직 방향으로 떨어진다. 떨어지는 도중 블록의 아래쪽 면 일부가 다른 블록의 윗면이나 바닥에 닿으면 블록은 멈춘다. 이때 좌우로 인접한 블록끼리는 스쳐 지나갈 수 있다.

사토리를 위해 다음 쿼리를 처리하는 프로그램을 작성해야 한다.

  • 1 i: 가로로 긴 1×41 \times 4 블록의 왼쪽 끝 칸이 x=ix = i에 위치하도록 블록을 떨어뜨린다.
  • 2 i: 세로로 긴 4×14 \times 1 블록이 x=ix = i에 위치하도록 블록을 떨어뜨린다.
  • 3 i: x=ix = i에 있는 블록의 yy 좌표 최댓값을 출력한다. 해당 xx 좌표에 블록이 없다면 00을 출력한다.

입력

첫 번째 줄에 쿼리의 개수 QQ가 주어진다. (1≤Q≤150 000)(1 \leq Q \leq 150\,000)

두 번째 줄부터 QQ개의 줄에 걸쳐 쿼리가 주어진다. 3번 쿼리는 한 번 이상 주어진다. (−109≤i≤109, i(-10^9 \leq i \leq 10^9,\ i는 정수))

출력

3번 쿼리의 답을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    5
    1 1
    2 3
    1 2
    3 1
    3 5
    
    예상 출력
    1
    6