P3477 [POI 2008] PER-Permutation
题目描述
Multiset is a mathematical object similar to a set, but each member of a multiset may have more than one membership.
Just as with any set, the members of a multiset can be ordered in many ways. We call each such ordering a permutation of the multiset. For example, among the permutations of the multiset $\{1,1,2,3,3,3,7,8\}$, there are $\{2,3,1,3,3,7,1,8\}$ and $\{8,7,3,3,3,2,1,1\}$.
We will say that one permutation of a given multiset is smaller (in lexicographic order) than another permutation, if on the first position that does not match the first permutation has a smaller element than the other one. All permutations of a given multiset can be numbered (starting from one) in an increasing order.
Task: Write a programme that reads the description of a permutation of a multiset and a positive integer from the standard input, determines the remainder of the rank of that permutation in the lexicographic ordering modulo $m$, writes out the result to the standard output.
多重集合是数学中的一个概念,它的定义很像集合,但是在多重集之中,同一个元素可以出现多次。
和集合一样,多重集的的元素可以有很多种元素的排布顺序。我们把它叫作多重集的排列。
现在我们定义多重集的某个排列 $s_i$ 比某个排列 $s_j$ 的大小比较为字典序比较。这样某个多重集的排列可以从小到大得排起来。
现在给你一个元素个数为 $n$ 的多重集的一个排列和 $m$,求这个排列的排名取模 $m$。
输入格式
The first line of the standard input holds two integers $n\ (1\le n \le 300000)$ and $m\ (2 \le m \le 10^9)$, separated by a single space. These denote, respectively, the cardinality of the multiset and the number $m$.
The second line of the standard input contains $n$ positive integers $a_i\ (1\le a_i \le 300000)$, separated by single spaces and denoting successive elements of the multiset permutation.
第一行:两个整数 $n,m$。
第二行:$n$ 个数,代表多重集的排列。
输出格式
The first and only line of the standard output is to hold one integer, the remainder modulo $m$ of the rank of the input permutation in the lexicographic ordering.
一行一个整数 排名取模 $m$。
说明/提示
感谢@远航之曲 贡献的翻译。