这题(BZOJ2431的加强版)厉害了。。。
考虑从小到大加入数,则i就可以让逆序对数+[0,i-1]
问题就变为了现在有一个不定方程:x1+..+xn=m,且0<=xi<=i-1
考虑用容斥,于是要计算F(i,j)表示[1,n]选i个数和为j的方案数
则最终答案为sum{(F(0,j)-F(1,j)+F(2,j)-...)*(和为m-j有n个变量的不定方程解的个数)}(j=0..m)
如何计算F(i,j)呢?一个显然的方法是类似背包的DP,不过这题目有点特殊。可以假设你现在有一个序列,你每次可以选择把序列整体+若干1,然后再添一个1,然后再+若干1。由于可能会加到大于n,把这部分减掉就好了.
这样最多只能弄大概450次,于是复杂度就是O(450*m)