탐욕 증가 수열을 갖는 순열의 개수 세기

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

요약
1부터 N까지의 순열 가운데 주어진 수열 G를 탐욕 증가 부분수열로 가지는 것의 개수를 10^9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

정수 1,2,…,N1, 2, \dots, N의 순열 A=(a1,a2,…,aN)A = (a_1, a_2, \dots, a_N)이 주어질 때, 탐욕 증가 부분수열(GIS)을 다음과 같이 정의한다.

g1=a1g_1 = a_1이라 하자. 각 i>1i > 1에 대해, gig_i는 AA에서 gi−1g_{i-1}보다 엄격히 큰 가장 왼쪽의 정수이다. 주어진 ii에 대해 그러한 정수가 존재하지 않으면, 수열의 GIS는 (g1,g2,...,gi−1)(g_1, g_2, ..., g_{i - 1})이라 한다.

예를 들어 순열 (2,3,1,5,4,7,6)(2, 3, 1, 5, 4, 7, 6)을 생각하자. 먼저 g1=2g_1 = 2이다. 22보다 큰 가장 왼쪽의 정수는 33이므로 g2=3g_2 = 3이다. 33보다 큰 가장 왼쪽의 정수는 55이다(11은 너무 작다). 따라서 g3=5g_3 = 5이다. 마지막으로 g4=7g_4 = 7이다. 그러므로 (2,3,1,5,4,7,6)(2, 3, 1, 5, 4, 7, 6)의 GIS는 (2,3,5,7)(2, 3, 5, 7)이다.

수열 G=(g1,g2,…,gL)G = (g_1, g_2, \dots, g_L)이 주어질 때, GIS가 GG인 정수 1,2,…,N1, 2, \dots, N의 순열 AA는 몇 개인가?

입력

첫째 줄에 순열 AA의 원소 개수 1≤N≤1061 \le N \le 10^6과 수열 GG의 길이 1≤L≤1061 \le L \le 10^6이 주어진다.

다음 줄에 11과 NN 사이의 LL개의 양의 정수 g1,…,gLg_1, \dots, g_L이 주어진다.

출력

주어진 수열을 GIS로 갖는 NN개 원소 순열의 개수를 하나의 정수로 출력한다. 이 수는 클 수 있으므로 소수 109+710^9 + 7로 나눈 나머지를 출력한다.

예제4

  1. 예제 1

    입력
    5 1
    1
    
    예상 출력
    0
    
  2. 예제 2

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

    입력
    5 3
    2 4 5
    
    예상 출력
    8
    
  4. 예제 4

    입력
    7 4
    1 4 5 7
    
    예상 출력
    20