마리오의 사물함

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

요약
빈 사물함 L개의 위치가 주어질 때, N개를 연속된 위치로 모으는 데 필요한 최소 교환 횟수를 구한다.
난이도

보통10점 중 5점

유형
슬라이딩 윈도우, 누적 합, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

마리오는 사물함 대여 회사를 운영한다. 사물함은 모두 한 줄로 놓여 있고 1부터 시작하는 양의 정수로 번호가 매겨져 있어서, 마리오는 사물함을 찾는 시간을 아낀다. 또 모든 사물함에는 바퀴가 달려 있어 자리를 마음대로 바꿀 수 있다. 두 사물함의 자리를 바꿀 때는 번호도 함께 바꾸므로, 번호는 언제나 1부터 순서대로 이어진다.

새 고객에게는 연속한 사물함을 빌려준다. 대여 초기에 고객은 맡긴 물건을 자주 꺼내 보는데, 사물함이 붙어 있으면 고객도 마리오도 물건을 찾기 쉽기 때문이다.

비어 있는 사물함이 충분하면 연속한 자리는 언제나 만들 수 있다. 예를 들어 새 고객에게 사물함 네 개가 필요한데 1, 3, 5, 6, 8번만 비어 있다면, 마리오는 5번과 2번의 자리를 바꾸고 6번과 4번의 자리를 바꾸어서 1번부터 4번까지를 빌려줄 수 있다. 그러나 마리오는 교환 횟수를 최소로 줄이고 싶다. 위 예에서는 1번과 4번의 자리만 바꾸어도 3번부터 6번까지를 빌려줄 수 있다.

한 번의 교환은 사물함 두 개의 자리를 맞바꾸는 것이다. 비어 있는 사물함의 번호가 주어질 때, 비어 있는 사물함 NN개를 연속하게 모으는 데 필요한 교환의 최소 횟수를 구하는 프로그램을 작성하라.

입력

입력은 여러 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 정수 NN과 LL이 주어진다 (1≤N≤L≤1000001 \le N \le L \le 100000). NN은 새 고객에게 필요한 사물함의 개수, LL은 비어 있는 사물함의 개수다. 다음 줄에는 비어 있는 사물함의 번호 LL개가 공백으로 구분되어 증가하는 순서로 주어진다. 각 번호는 10000000001000000000 이하의 양의 정수다.

입력의 끝에는 N=L=0N = L = 0인 줄이 하나 주어진다. 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 비어 있는 사물함 NN개를 연속하게 모으는 데 필요한 교환의 최소 횟수를 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

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

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

    입력
    4 6
    3 4 5 6 9 11
    0 0
    
    예상 출력
    0
    
  4. 예제 4

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