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

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

다중집합 순열의 순위

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

요약
주어진 중복 원소 순열이 모든 서로 다른 순열을 사전순으로 나열했을 때 몇 번째인지 m으로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

유형
조합론, 수학, 비트 연산, 누적 합
정답자
아직 제출이 없습니다

문제

다중집합은 집합과 비슷하지만 각 원소가 두 번 이상 나타날 수 있습니다. 집합처럼 다중집합의 원소들도 여러 순서로 나열할 수 있으며, 그렇게 나열한 것 하나하나를 그 다중집합의 순열이라고 부릅니다. 예를 들어 다중집합 {1,1,2,3,3,3,7,8}\{1, 1, 2, 3, 3, 3, 7, 8\}의 순열로는 (2,3,1,3,3,7,1,8)(2, 3, 1, 3, 3, 7, 1, 8)과 (8,7,3,3,3,2,1,1)(8, 7, 3, 3, 3, 2, 1, 1) 등이 있습니다.

순열은 사전식 순서로 비교합니다. 두 순열을 앞에서부터 비교했을 때 처음으로 달라지는 위치에서 더 작은 원소를 가진 쪽이 더 작은 순열입니다. 주어진 다중집합의 서로 다른 순열을 모두 사전식 오름차순으로 정렬하고 11부터 번호를 매겼을 때, 어떤 순열에 매겨진 번호를 그 순열의 순위라고 합니다.

다중집합의 순열 하나와 양의 정수 mm이 주어집니다. 이 순열의 순위를 구하고, 그 값을 mm으로 나눈 나머지를 출력하세요.

입력

첫째 줄에 두 정수 nn과 mm이 주어집니다 (1≤n≤300,0001 \le n \le 300{,}000, 2≤m≤1,000,000,0002 \le m \le 1{,}000{,}000{,}000). 각각 다중집합의 원소 개수와, 나머지를 취하는 수 mm입니다.

둘째 줄에 다중집합 순열의 원소를 순서대로 나타내는 nn개의 양의 정수 a1,a2,…,ana_1, a_2, \dots, a_n이 공백으로 구분되어 주어집니다 (1≤ai≤300,0001 \le a_i \le 300{,}000).

출력

주어진 순열의 사전식 순위를 mm으로 나눈 나머지를 정수 하나로 출력합니다.

설명

다중집합 {1,2,2,10}\{1, 2, 2, 10\}의 순열 (2,1,10,2)(2, 1, 10, 2)를 생각해 봅시다. 사전식 순서에서 이 순열보다 작은 순열은 (1,2,2,10)(1, 2, 2, 10), (1,2,10,2)(1, 2, 10, 2), (1,10,2,2)(1, 10, 2, 2), (2,1,2,10)(2, 1, 2, 10)의 네 개입니다. 따라서 (2,1,10,2)(2, 1, 10, 2)의 순위는 55이고, 5 mod 1000=55 \bmod 1000 = 5입니다.

예제5

  1. 예제 1

    입력
    4 1000
    2 1 10 2
    
    예상 출력
    5
    
  2. 예제 2

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

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

    입력
    6 1000000000
    6 5 4 3 2 1
    
    예상 출력
    720
    
  5. 예제 5

    입력
    4 7
    5 5 5 5
    
    예상 출력
    1