최솟값 찾기

면접 대비

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

요약
배열의 각 위치에서 끝나는 길이 L인 구간의 최솟값을 순서대로 출력합니다.
난이도

보통10점 중 4점

유형
슬라이딩 윈도우, 큐
정답자
아직 제출이 없습니다

문제

NN개의 수 A1,A2,…,ANA_1, A_2, \dots, A_N과 LL이 주어진다.

DiD_i를 Ai−L+1A_{i-L+1}부터 AiA_i까지의 최솟값이라고 하자. 즉 DiD_i는 ii번째 수에서 끝나는 길이 LL의 구간에 들어 있는 가장 작은 값이다. 첨자가 00 이하인 AA는 없으므로 무시하고 DiD_i를 구한다. 따라서 i<Li < L이면 구간이 짧아져서 DiD_i는 A1A_1부터 AiA_i까지의 최솟값이 된다.

D1D_1부터 DND_N까지를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 NN과 LL이 주어진다. (1≤L≤N≤5 000 0001 \le L \le N \le 5\,000\,000)

둘째 줄에 NN개의 수 AiA_i가 공백으로 구분되어 주어진다. (−109≤Ai≤109-10^9 \le A_i \le 10^9)

출력

첫째 줄에 D1D_1부터 DND_N까지를 순서대로 공백으로 구분해 출력한다.

예제4

  1. 예제 1

    입력
    12 3
    1 5 2 3 6 2 3 7 3 5 2 6
    
    예상 출력
    1 1 1 2 2 2 2 2 3 3 2 2
  2. 예제 2

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

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

    입력
    5 1
    -1 2 -3 4 -5
    
    예상 출력
    -1 2 -3 4 -5