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

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

Kodkraft

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

요약
K개 디비전의 연간 대회 일정이 주어질 때, 1부터 K까지 순서대로 등장하는 가장 짧은 구간을 찾아 그 안의 대회 수를 구한다.
난이도

보통10점 중 6점

유형
슬라이딩 윈도우, 투 포인터, 구현
정답자
아직 제출이 없습니다

문제

Nicolas는 kodkraft\texttrademark 사이트에서 프로그래밍 대회를 시작하려고 한다. 참가할 수 있는 디비전이 아주 많지만, Nicolas는 kodkraft™의 신규 참가자이므로 가장 낮은 디비전(디비전 1)에서 시작해야 한다. Nicolas의 목표는 최대한 빨리 가장 높은 디비전(디비전 KK)에 올라가 그곳에서 대회를 우승하는 것이다.

kodkraft™의 규칙에 따르면 한 대회마다 디비전을 하나씩만 올릴 수 있으므로, 그는 각 디비전에서 최소 한 번은 대회를 치러야 한다. 하지만 Nicolas는 매우 자신감이 넘쳐서, 다음 디비전으로 올라가려면 각 디비전에서 정확히 한 번씩만 대회를 치르면 된다고 생각한다. kodkraft™에서 대회가 열릴 때는 한 번에 하나의 디비전만 경쟁하며, 두 대회가 시간상 겹치는 일은 없다. 또한 대회 일정은 매년 동일하다.

Nicolas는 kodkraft™에서 대회를 시작할 날짜를 일 년 중 원하는 대로 정할 수 있다. Nicolas가 말하는 '최대한 빨리'란, 그가 처음 참가하는 대회부터 최고 디비전에서 처음 우승할 때까지 kodkraft™에서 열리는 대회 수(그가 참가 여부와 무관하게)가 최소가 되는 것을 뜻한다. Nicolas가 필요한 대회 수를 계산하도록 도와주자!

입력

첫 번째 줄에는 두 정수 NN과 KK가 주어진다(1≤K≤N≤1061 \leq K \leq N \leq 10^6). NN은 연간 대회 수, KK는 디비전 수이다.

다음 줄에는 NN개의 정수 x1,…,xNx_1, \dots, x_N이 주어진다(1≤xi≤K1 \leq x_i \leq K). 이는 일 년 동안의 대회 일정이다. xix_i는 새해 이후 ii번째 대회에서 경쟁하는 디비전이다. 11부터 KK까지의 각 디비전은 일 년 동안 최소 한 번은 대회를 연다.

출력

Nicolas가 kodkraft™에서 대회를 시작한 때부터 디비전 KK에서 우승할 때까지 열려야 하는 최소 대회 수를 정수 하나로 출력한다.

예제3

  1. 예제 1

    입력
    3 3
    3 2 1
    
    예상 출력
    5
    
  2. 예제 2

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

    입력
    7 5
    2 1 1 4 3 2 5
    
    예상 출력
    19