작은 수는 싫어!

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

요약
배열의 양끝을 버리거나 인접한 두 수를 합칠 수 있을 때, K보다 작은 수가 남지 않으면서 남길 수 있는 수의 최대 개수를 구한다.
난이도

보통10점 중 7점

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

문제

수를 가지고 노는 걸 좋아하는 정환은 생일날 아주 특별한 선물로 길이가 NN인 배열 A=\[A_1,⋯ ,A_N]A = \[A\_1, \cdots , A\_N]을 받았다.

그런데 이 배열 속에는 정환이 싫어하는 작은 수들이 섞여 있었다. 그래서 정환은 다음과 같은 두 가지 기술을 원하는 만큼 반복하여 작은 수들을 전부 없애버리기로 마음먹었다. 단, 배열이 비어 있다면 기술을 사용할 수 없다.

  • 배열의 맨 앞이나 맨 뒤에 있는 수 하나를 버린다, 즉 A_1A\_1 또는 A_nA\_n 중 하나를 버린다.
  • 배열 속 인접한 두 수를 합하여 하나로 합친다. 정확히는 1≤i<n1 \le i < n인 ii을 골라 두 수 A_iA\_i, A_i+1A\_{i+1}을 없애고, 그 자리에 A_i+A_i+1A\_i+A\_{i+1}을 집어넣는다.
  • 여기서 nn은 해당 기술을 쓸 당시 배열에 남아 있는 수의 개수이며, 기술 수행 후에는 배열의 인덱스가 다시 매겨진다.

정환은 작은 수가 싫다고 했지만, 특별한 생일 선물인데 너무 많이 버리면 아깝다고 생각했다. 그래서 최대한 배열을 보존하기 위해 배열에  KK보다 작은 수가 남아 있지 않도록 하면서도 남아 있는 수의 개수를 최대화하기로 했다.

정환이 최종적으로 남길 수 있는 수의 최대 개수를 구해보자.

입력

첫 번째 줄에 정수 NN, KK가 공백으로 구분되어 주어진다.

두 번째 줄에 NN개의 정수 A_1,⋯ ,A_NA\_1, \cdots ,A\_N이 공백으로 구분되어 주어진다.

출력

KK보다 작은 수가 배열에 남아있지 않도록 조작한 후, 남길 수 있는 수의 최대 개수를 출력한다.

제한

  • 1≤N≤1,000,0001 \le N \le 1\\,000\\,000
  • −109≤K≤109-10^9 \le K \le 10^9
  • −109≤A_i≤109-10^9 \le A\_i \le 10^9 (1≤i≤N)(1 \le i \le N)

예제3

  1. 예제 1

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

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

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