ci:= (Aj=i なる j の個数)とします。
また、ci=0 であるような i のうち、最小のものを P、最小から2番目のものを Q とおきます。
長さが L (0≤L≤N) であるような準順列の個数を数えます。
- 0≤L<P−1 のとき
- 答えは (i=1∏L+1ci)×(i=1∑L+1ci1) です。
- P−1≤L<Q−1 のとき
- 答えは (i=1∏P−1ci)×(i=P+1∏L+1ci) です。
- Q−1≤L のとき
よって、ci の積と逆数和を持ちながら計算することでこの問題は O(NlogN) で解けます。