만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

순열 제작의 달인

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

요약
길이 N의 순열 P 중 B = (A_P1, ..., A_PN)의 왼쪽에서 최댓값이 갱신되는 위치가 K개 이하인 순열의 개수를 1,000,000,007로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 조합론, 정렬
정답자
아직 제출이 없습니다

문제

배열 제작의 달인 Jiro는 길이 NN인 수열 AA가 주어졌을 때, 다음 조건을 만족하는 길이 NN의 순열 PP의 개수를 구하려고 한다. 길이 NN의 순열 PP는 11부터 NN까지의 모든 정수를 한 번씩만 사용하여 만든 수열이다.

  • 수열 BB는 (AP1,AP2,…,APN)(A_{P_1}, A_{P_2}, \ldots, A_{P_N})로 정의한다.
  • 수열 BB의 가증스러움은 1≤i≤N1 \le i \le N인 정수 ii 중에서 다음 조건을 만족하는 ii의 개수이다.
    • i=1i=1 또는 max⁡(B1,…,Bi−1)<Bi\max(B_1, \ldots, B_{i-1}) < B_i
  • 수열 BB의 가증스러움은 KK 이하이다.

조건을 만족하는 순열 PP의 개수를 1 000 000 0071\,000\,000\,007로 나눈 나머지를 구하시오.

입력

첫째 줄에 수열 AA의 길이 NN과 조건에 명시된 KK가 공백으로 구분되어 주어진다. (1≤N≤5 0001 \le N \le 5\,000, 1≤K≤N1 \le K \le N)

둘째 줄에 수열 A1,A2,…,ANA_1, A_2, \ldots, A_N이 공백으로 구분되어 주어진다. (1≤Ai≤1091 \le A_i \le 10^9)

출력

조건을 만족하는 순열 PP의 개수를 1 000 000 0071\,000\,000\,007로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

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

    입력
    4 2
    1 1 2 2
    
    예상 출력
    24