허수아비

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

요약
힘 P인 화살이 위치 i 이하에서 멈추도록 설치해야 하는 허수아비의 최소 개수를 각 i마다 구하고, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
그리디, 정렬, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

수직선의 위치 00에서 오른쪽 방향으로 힘 PP를 가진 화살이 발사된다. 각 정수 위치 ii (1≤i≤N1 ≤ i ≤ N)에는 방어력 A_iA\_i를 가진 허수아비를 최대 하나 설치할 수 있다. 화살이 허수아비에 부딪치면, 화살의 힘이 방어력보다 작거나 같을 경우 화살은 즉시 멈춘다. 반대로 화살의 힘이 방어력보다 크면, 화살의 힘은 현재 화살의 힘에서 A_iA\_i만큼 줄어든 채 계속 진행한다.

정수 ii에 대하여 f(i)f(i)의 값을 "화살이 위치 ii에서 멈추거나 위치 ii보다 왼쪽에서 멈추도록 하기 위해 필요한 허수아비의 최소 개수" 라고 정의하자. 화살을 멈추게 할 수 있는 방법이 없을 때의 값은 −1−1이다.

예를 들어서 N=5N = 5, P=10P = 10이고 A_1=3A\_1 = 3, A_2=6A\_2 = 6, A_3=1A\_3 = 1, A_4=1A\_4 = 1, A_5=10A\_5 = 10이라고 하자. 모든 f(i)f(i)의 값과 설치한 허수아비의 위치는 다음과 같다.

iif(i)f(i)의 값설치한 허수아비의 위치
i=1i = 1−1-1불가능
i=2i = 2−1-1불가능
i=3i = 333\[1,2,3]\[1, 2, 3]
i=4i = 433\[1,2,3]\[1, 2, 3] 혹은 \[1,2,4]\[1, 2, 4] 중 하나 선택 가능
i=5i = 511\[5]\[5]

1≤i≤N1 ≤ i ≤ N인 모든 ii에 대하여 f(i)f(i)의 값을 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 정수 NN과 화살의 힘 PP가 공백을 사이에 두고 주어진다.

두 번째 줄에 NN개의 정수 A_1,A_2,⋯ ,A_NA\_1 , A\_2 ,\cdots, A\_N이 공백을 사이에 두고 주어진다.

출력

첫 번째 줄에 f(1),f(2),⋯ ,f(N)f(1), f(2), \cdots , f(N)의 값을 공백을 사이에 두고 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 1≤N≤500,0001 ≤ N ≤ 500\\, 000
  • 1≤P≤1091 ≤ P ≤ 10^9
  • 1≤i≤N1 ≤ i ≤ N인 모든 ii에 대하여 1≤A_i≤1091 ≤ A\_i ≤ 10^9

예제3

  1. 예제 1

    입력
    5 10
    3 6 1 1 10
    
    예상 출력
    -1 -1 3 3 1
    
  2. 예제 2

    입력
    3 10
    20 20 20
    
    예상 출력
    1 1 1
    
  3. 예제 3

    입력
    1 5
    3
    
    예상 출력
    -1