Max or Min

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

요약
원 위에 놓인 수들에 대해 어떤 수와 양쪽 이웃을 min 또는 max로 바꾸는 연산을 할 때, 각 x에 대해 모든 수를 x로 만드는 최소 시간을 구하거나 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
구현, 그리디, 수학, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Kevin은 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n을 원형으로 배치했다. 즉, aia_i와 ai+1a_{i+1} (1≤i<n1 \le i < n)은 이웃이고, a1a_1과 ana_n도 이웃이다. 따라서 각 수는 정확히 두 개의 이웃을 가진다.

Kevin은 1분 동안 aia_i를 aia_i와 그 두 이웃, 이렇게 세 수 중 최솟값으로 바꿀 수 있다. 또는 같은 세 수 중 최댓값으로 바꿀 수도 있다. 예를 들어 ai=5a_i = 5이고 두 이웃이 3과 2일 때, 최솟값 연산을 하면 aia_i는 2가 된다. 하지만 최댓값 연산을 하면 aia_i는 5로 그대로 남는다.

각 xx (1≤x≤m1 \le x \le m)에 대해, 모든 수를 xx로 만드는 데 필요한 최소 시간(분)을 구하거나, 불가능하다면 불가능함을 판별하라.

입력

첫째 줄에 두 정수 nn과 mm이 주어진다 (3≤n≤2⋅1053 \le n \le 2 \cdot 10^5, 1≤m≤2⋅1051 \le m \le 2 \cdot 10^5). nn은 원에 있는 정수의 개수이고, mm은 답을 구해야 하는 정수의 개수이다.

둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다 (1≤ai≤m1 \le a_i \le m).

출력

mm개의 정수를 출력한다. ii번째 정수는 모든 수를 ii로 만드는 데 필요한 최소 시간(분)이며, 불가능하면 −1-1이다.

힌트

모든 수를 2로 만들려면 Kevin은 최소 5분이 필요하다. 가능한 연산 순서 중 하나는 다음과 같다.

  1. a6a_6에 최솟값 연산을 한다. a6a_6은 2가 된다.
  2. a4a_4에 최댓값 연산을 한다. a4a_4는 2가 된다.
  3. a3a_3에 최댓값 연산을 한다. a3a_3은 5가 된다.
  4. a2a_2에 최솟값 연산을 한다. a2a_2는 2가 된다.
  5. a3a_3에 최솟값 연산을 한다. a3a_3은 2가 된다.

예제1

  1. 예제 1

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