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

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

Queued-Ranged

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

요약
앞에서 원하는 만큼의 학생을 떼어 정렬해 뒤에 붙이는 과정을 반복할 때 만들 수 있는 서로 다른 최종 순서의 가짓수를 998244353으로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

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

문제

체육 시간이 되어 NN명의 학생들이 운동장에 서 있다. 선생님 정원이는 학생들을 키 순서대로 정렬하려고 한다. 현재 학생들은 줄 A에 서 있는데, 정원이는 다음과 같은 방식으로 학생들을 줄 B로 옮기려고 한다.

  1. 정원이가 줄 A에 있는 학생 중 맨 앞에 있는 11명 이상의 학생을 임시 줄로 옮긴다.
  2. 임시 줄에 있는 학생들을 키의 오름차순으로 정렬한다. 정렬 후 가장 키가 작은 학생이 맨 앞에 있다.
  3. 임시 줄에 있는 모든 학생들을 줄 B의 뒤쪽으로 순서를 바꾸지 않고 옮긴다.
  4. 줄 A에 학생이 모두 없어질 때까지 1 ~ 3단계를 반복한다.

정원이는 줄 A에 있는 학생들을 옮기는 방법을 바꾸면 줄 B로 이동하는 학생들의 최종 순서가 바뀔 수 있다는 것을 확인하였다. 정원이는 학생들의 최종 순서로 가능한 경우가 얼마나 있는지 알아보려고 한다. 학생들의 가능한 최종 순서의 가짓수를 구하는 프로그램을 작성하여라.

입력

첫 번째 줄에 학생의 수 NN이 주어진다.

두 번째 줄에는 학생들의 키 순서를 나타내는 정수 NN개가 주어진다. i+1i+1(0≤i<N0 \leq i < N)번째 값은 앞에서 i+1i+1번째 학생보다 키가 작은 학생 수를 의미하는 00 이상 N−1N-1 이하의 정수이다. 모든 학생의 키는 서로 다르다.

출력

정원이가 학생들을 모두 정렬한 다음 나올 수 있는 학생들의 순서로 가능한 경우의 수를 998,244,353998\\,244\\,353으로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    5
    0 2 1 3 4
    
    예상 출력
    2
    
  2. 예제 2

    입력
    6
    5 4 3 2 1 0
    
    예상 출력
    32
    
  3. 예제 3

    입력
    9
    6 7 8 3 4 5 0 1 2
    
    예상 출력
    55