만드는 중입니다

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

기차 추적 2

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

요약
길이 N인 숨겨진 배열의 크기 K 구간별 최솟값이 주어질 때, 이 최솟값을 만드는 배열의 개수를 1000000007로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 슬라이딩 윈도우, 스택
정답자
아직 제출이 없습니다

문제

매일 특급열차가 농장 옆을 지나간다. 열차에는 NN개의 객차(1≤N≤1051 \leq N \leq 10^5)가 있고, 각 객차에는 11 이상 10910^9 이하의 양의 정수 번호가 붙어 있다. 서로 다른 객차에 같은 번호가 붙어 있을 수도 있다.

평소라면 Bessie는 열차가 지나가는 것을 보며 객차 번호를 기록한다. 하지만 오늘은 안개가 너무 짙어서 번호를 하나도 볼 수 없다. 다행히 Bessie는 도시의 믿을 만한 곳에서 객차 번호 수열의 슬라이딩 윈도우 최솟값을 구해 두었다. 양의 정수 KK와 N−K+1N-K+1개의 양의 정수 c1,…,cN+1−Kc_1,\dots,c_{N+1-K}가 있으며, cic_i는 객차 i,i+1,…,i+K−1i, i+1, \dots, i+K-1 중 번호의 최솟값이다.

Bessie를 도와 슬라이딩 윈도우 최솟값과 맞아떨어지도록 각 객차에 번호를 붙이는 방법의 수를 구하라. 이 수는 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 구한다.

Bessie의 정보는 완전히 신뢰할 수 있다. 맞아떨어지는 배정이 적어도 하나는 존재한다는 것이 보장된다.

입력

첫째 줄에 공백으로 구분된 두 정수 NN과 KK가 주어진다. 이어지는 줄에는 슬라이딩 윈도우 최솟값 c1,…,cN+1−Kc_1,\dots,c_{N+1-K}가 한 줄에 하나씩 주어진다.

출력

하나의 정수를 출력한다. 각 객차에 10910^9 이하의 양의 정수를 배정하는 방법 중, 모든 1≤i≤N−K+11 \leq i \leq N-K+1에 대해 객차 i,i+1,…,i+K−1i, i+1, \dots, i+K-1 중 번호의 최솟값이 cic_i가 되는 방법의 수를 109+710^9 + 7로 나눈 나머지이다.

예제1

  1. 예제 1

    입력
    4 2
    999999998
    999999999
    999999998
    
    예상 출력
    3