HDU 5225 Tom and permutation

正文索引 [隐藏]

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5225
题意传送门:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=580&pid=1002

题目翻译

Tom学会了通过写程序求出一个1-n的排列的逆序对数,但他的老师给了他一个难题:
给出一个1-n的排列,求所有字典序比它小的1-n的排列的逆序对数之和。
Tom一时不知道该怎么做,所以他来找你帮他解决这个问题。
因为数可能很大,答案对{10}^{9}+7取模。

题解

我们首先预处理出N的全排列数量,在预处理出N的所有全排列中逆序对数量,这些都是可以递推的。
然后我们从前往后做。
首先对于某一位,如果选比这一位小的数字,那么之后是可以随意排列的。
那么答案就要加上这一位之前所有固定的数字对于后面的逆序对数量后面的全排列,再加上枚举的这一位数字对于后面的逆序对数量全排列数量,再加上后面所有全排列中的逆序对数量。
如果这一位选择相同的数字,那么之后的一定要选择小于等于其才可以,那么按之前的方法处理下一位即可。

代码