아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

호텔

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

요약
일렬로 늘어선 호텔 객실에서 체크인과 체크아웃 요청을 처리하며, 요청한 길이의 가장 왼쪽 빈 방 묶음을 배정하고 없으면 0을 출력한다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 분할 정복, 이분 탐색
정답자
아직 제출이 없습니다

문제

한 호텔의 객실 NN개(1≤N≤50,0001 \le N \le 50{,}000)가 복도를 따라 한 줄로 늘어서 있으며, 11번부터 NN번까지 번호가 매겨져 있습니다. 처음에는 모든 객실이 비어 있습니다.

당신은 체크인 또는 체크아웃 요청 MM개(1≤M<50,0001 \le M < 50{,}000)를 순서대로 처리해야 합니다.

  • 체크인 1 D (1≤D≤N1 \le D \le N): 연속한 객실 DD개를 배정합니다. DD개의 객실이 모두 비어 있는 시작 위치 rr 가운데 가장 작은 rr 을 골라 r,r+1,…,r+D−1r, r+1, \dots, r+D-1 번 객실을 사용 중으로 표시하고, 그 rr 을 출력합니다. 연속한 빈 객실 DD개가 존재하지 않으면 아무 객실도 배정하지 않고 00 을 출력합니다.
  • 체크아웃 2 X D (1≤X≤N−D+11 \le X \le N-D+1): X,X+1,…,X+D−1X, X+1, \dots, X+D-1 번 객실을 빈 객실로 표시합니다. 이 객실들 중 일부 또는 전부가 이미 비어 있어도 되며, 그런 객실에는 아무 영향이 없습니다.

입력

  • 첫째 줄: 두 정수 NN 과 MM.
  • 다음 MM개의 줄: 각 줄은 다음 두 형식 중 하나로 요청을 나타냅니다.
    • 1 D — 객실 DD개에 대한 체크인 요청.
    • 2 X D — XX번부터 X+D−1X+D-1번까지 객실에 대한 체크아웃 요청.

출력

  • 각 체크인 요청마다, 배정된 연속 객실의 첫 번째 객실 번호 rr 을 한 줄에 출력합니다. 요청을 만족할 수 없으면 00 을 출력합니다. 체크아웃 요청은 아무것도 출력하지 않습니다.

예제3

  1. 예제 1

    입력
    10 6
    1 3
    1 3
    1 3
    1 3
    2 5 5
    1 6
    
    예상 출력
    1
    4
    7
    0
    5
    
  2. 예제 2

    입력
    1 4
    1 1
    1 1
    2 1 1
    1 1
    
    예상 출력
    1
    0
    1
    
  3. 예제 3

    입력
    5 4
    1 5
    1 1
    2 2 2
    1 2
    
    예상 출력
    1
    0
    2