만드는 중입니다

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

어려운 문제

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

요약
짝수 길이 부분 배열 가운데 앞뒤 절반의 최댓값 차이가 k 이하인 것을 골라, (마지막 원소 + 10) × f_m을 모두 더한 값을 998244353으로 나눈 나머지를 구합니다.
난이도

어려움10점 중 8점

유형
분할 정복, 스택, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

정수 배열 a1,…,ana_1, \ldots, a_n이 주어진다. 길이가 짝수인 부분 구간 ai,…,ai+2m−1a_i, \ldots, a_{i + 2m - 1}에서 앞 절반 ai,…,ai+m−1a_i, \ldots, a_{i + m - 1}의 최댓값과 뒤 절반 ai+m,…,ai+2m−1a_{i + m}, \ldots, a_{i + 2m - 1}의 최댓값의 차이의 절댓값이 kk 이하이면, 이 구간을 좋은 구간이라고 한다.

정수 수열 ff를 다음과 같이 정의한다.

  • f1=3240f_1 = 3240
  • f2=3081f_2 = 3081
  • f3=2841f_3 = 2841
  • f4=343f_4 = 343
  • 4<i4 < i일 때 fi=fi−1⋅223+fi−2⋅229+fi−3⋅fi−4⋅239+17f_i = f_{i-1} \cdot 223 + f_{i-2} \cdot 229 + f_{i-3} \cdot f_{i-4} \cdot 239 + 17

모든 좋은 부분 구간에 대해 (ai+m−1+10)⋅fm(a_{i+m-1} + 10) \cdot f_m의 합을 구하라. 값이 클 수 있으므로 998244353으로 나눈 나머지를 출력한다.

입력

첫 줄에 테스트 케이스의 개수 tt (1≤t≤1041 \le t \le 10^4)가 주어진다. 각 테스트 케이스의 첫 줄에는 두 정수 nn, kk (1≤n≤5⋅1051 \le n \le 5 \cdot 10^5, 0≤k≤min⁡(n,10)0 \le k \le \min(n, 10))가 주어진다.

다음 줄에는 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n (1≤ai≤n1 \le a_i \le n)이 주어진다.

모든 테스트 케이스의 nn의 합은 5⋅1055 \cdot 10^5을 넘지 않는다.

출력

각 테스트 케이스마다 답을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3
    6 0
    3 1 3 1 3 1
    8 4
    5 8 4 6 5 7 8 5
    7 3
    2 1 3 2 2 1 3
    
    예상 출력
    144768
    745933
    448953