아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

순열

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

요약
주어진 순열에서 구간의 최솟값 한쪽 끝에 붙은 원소들을 자유롭게 재배열해 얻을 수 있는 서로 다른 순열의 개수를 998244353으로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

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

문제

순열 p1,p2,…,pnp_1, p_2, \dots, p_n이 주어진다. 다음 연산을 원하는 만큼 반복할 수 있다.

  • 구간 pl,pl+1,…,pl+cp_l, p_{l+1}, \dots, p_{l+c} (l≥1l \geq 1, l+c≤nl+c \leq n)을 골랐을 때 이 구간의 최솟값이 plp_l이면, pl+1,…,pl+cp_{l+1}, \dots, p_{l+c}를 임의의 순서로 재배열할 수 있다.
  • 구간 pl,pl+1,…,pl+cp_l, p_{l+1}, \dots, p_{l+c} (l≥1l \geq 1, l+c≤nl+c \leq n)을 골랐을 때 이 구간의 최솟값이 pl+cp_{l+c}이면, pl,…,pl+c−1p_l, \dots, p_{l+c-1}을 임의의 순서로 재배열할 수 있다.

이 연산들로 얻을 수 있는 서로 다른 순열의 개수를 구한다. 답이 클 수 있으므로 998244353998244353으로 나눈 나머지를 출력한다.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다 (1≤T≤1000001\le T\le 100000).

각 테스트 케이스의 첫 줄에 두 정수 nn과 cc가 주어진다 (2≤c≤5000002\le c \le 500000, 2≤n≤5000002\le n\le 500000). 모든 테스트 케이스의 nn 합은 500000을 넘지 않는다.

각 테스트 케이스의 둘째 줄에 순열 p1,…,pnp_1, \ldots, p_n이 주어진다 (1≤pi≤n1\le p_i\le n).

출력

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

예제1

  1. 예제 1

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