파일 업로드

증가하지 않는 부분수열

profile
실행 시간 제한메모리 제한
2 초512 MB
📃 해결할 문제

수현이는 최근 USACO 대회에 참여하여, 다음과 같은 문제를 마주쳤습니다. 

물론, 수현이는 이 문제를 해결하는 방법을 알고 있습니다. 그렇다면 당신은 어떠신가요?

A1,A2,,ANA_1, A_2, \ldots, A_N의 길이가 NN인 수열을 생각해 보십시오. 

(1N5104)(1 \le N \le 5 \cdot 10^4) 이 수열은 1K1 \ldots K 범위의 정수만을 포함하고 있습니다. (1K20)(1 \le K \le 20) 당신은 [Li,Ri][L_i, R_i] 형태의 QQ개의 쿼리를 받게 됩니다. (1Q2105)(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의 부분수열은 Lj1<j2<<jxRL \le j_1 \lt j_2 \lt \cdots \lt j_x \le R 그리고 Aj1Aj2AjxA_{j_1} \le A_{j_2} \le \cdots \le A_{j_x}를 만족하는 인덱스 (j1,j2,,jx)(j_1, j_2, \ldots, j_x)의 집합입니다. 빈 부분수열도 고려하는 것을 잊지 마십시오!

💻 입력

첫 번째 줄에는 두 개의 공백으로 구분된 정수 NNKK가 주어집니다.

두 번째 줄에는 NN개의 공백으로 구분된 정수 A1,A2,,ANA_1, A_2, \ldots, A_N이 주어집니다.

세 번째 줄에는 단일 정수 QQ가 주어집니다.

다음 QQ 줄 각각에는 두 개의 공백으로 구분된 정수 LiL_iRiR_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로 나눈 나머지를 새로운 줄에 출력합니다.


💻 예제 입력 1
5 2
1 2 1 1 2
3
2 3
4 5
1 5
🖨️ 예제 출력 1
3
4
20

💡 힌트

첫 번째 쿼리의 경우, 증가하지 않는 부분수열은 (),(2),(), (2), 그리고 (3)(3)입니다. (2,3)(2,3)A2otA3A_2 ot \le A_3 이므로 증가하지 않는 부분 수열이 아닙니다.

두 번째 쿼리의 경우, 증가하지 않는 부분수열은 (),(4),(), (4), (5)(5) 그리고 (4,5)(4,5)입니다.


출처: USACO 2020 January Contest, Platinum Problem 2. Non-Decreasing Subsequences