만드는 중입니다

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

비감소 부분수열

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

요약
값이 1부터 K까지인 배열이 주어질 때, 각 구간에서 비감소 부분수열의 개수를 빈 부분수열까지 포함해 10^9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 분할 정복, 행렬, 누적 합
정답자
아직 제출이 없습니다

문제

Bessie는 최근 USACO 대회에 참가했다가 다음 문제를 만났다. 물론 Bessie는 이 문제를 푸는 방법을 알고 있다. 하지만 당신은 알고 있는가?

1…K1\ldots K (1≤K≤20)(1\le K\le 20) 범위의 정수로만 이루어진 길이 NN (1≤N≤5⋅104)(1\le N\le 5\cdot 10^4)의 수열 A1,A2,…,ANA_1,A_2,\ldots,A_N이 주어진다. [Li,Ri][L_i,R_i] (1≤Li≤Ri≤N)(1\le L_i\le R_i\le N) 형태의 쿼리 QQ개 (1≤Q≤2⋅105)(1\le Q\le 2\cdot 10^5)가 주어진다. 각 쿼리마다 ALi,ALi+1…,ARiA_{L_i},A_{L_i+1}\ldots, A_{R_i}의 비감소 부분수열의 개수를 109+710^9+7로 나눈 나머지를 구하라.

AL,…,ARA_L,\ldots,A_R의 비감소 부분수열이란 L≤j1<j2<⋯<jx≤RL\le j_1<j_2<\cdots<j_x\le R이고 Aj1≤Aj2≤⋯≤AjxA_{j_1}\le A_{j_2}\le \cdots \le A_{j_x}인 인덱스의 모음 (j1,j2,…,jx)(j_1,j_2,\ldots, j_x)이다. 빈 부분수열도 포함해서 세야 한다.

입력

첫째 줄에 공백으로 구분된 두 정수 NN과 KK가 주어진다.

둘째 줄에 공백으로 구분된 NN개의 정수 A1,A2,…,ANA_1,A_2,\ldots, A_N이 주어진다.

셋째 줄에 정수 QQ가 주어진다.

다음 QQ개의 줄에 각각 공백으로 구분된 두 정수 LiL_i와 RiR_i가 주어진다.

출력

각 쿼리 [Li,Ri][L_i,R_i]마다 ALi,ALi+1…,ARiA_{L_i},A_{L_i+1}\ldots, A_{R_i}의 비감소 부분수열의 개수를 109+710^9+7로 나눈 나머지를 새 줄에 출력한다.

힌트

첫 번째 쿼리의 비감소 부분수열은 (),(2),(3)(), (2), (3)이다. (2,3)(2,3)은 A2≰A3A_2\not \le A_3이므로 비감소 부분수열이 아니다.

두 번째 쿼리의 비감소 부분수열은 ()(), (4)(4), (5)(5), (4,5)(4,5)이다.

예제1

  1. 예제 1

    입력
    5 2
    1 2 1 1 2
    3
    2 3
    4 5
    1 5
    
    예상 출력
    3
    4
    20