昨天想这一题想了很久, 因为总感觉其他人的题解写错了, 后来才发现是我自己想错了
下面附上别人的说法
所以如果当前m不比当前的(n-2)*(n-1)/2(也就是减少一个数之后的最多的逆序对数)大,
就可以直接把当前的最小数放在最前面,这肯定是最优的。
反之,则考虑最小数的放置位置。
假设当前排列长为n,最小数为a,则a有n种放法,放在从左到右第i个位置时会生成i-1个逆序对
(因为它左边有i-1个比他大)。
因为m大于n-1长度排列最多所能产生的逆序数,所以a不可能放在最前面,否则不满足条件。
怎么办呢?所以a要放到最后,这样m减少的最多。
这里我一直无法理解为何m > n - 1 长度排列所能产生的逆序数的话, a就要放到最后, 我一直死磕的认为, 这里需要判断应该放在哪, 后来按照我的思路实现了代码后, 发现结果并不是最小的, 后来我才发现, 真的是要放到最后, 下面我来说明原因
因为若第i个数不能放在第i位(即此时m > n - 1 长度排列所能产生的逆序数), 那么它确实应该放在越后面越好, 因为这样放在第i位的数可以更小, 那么这个字典序相应的也会更小
不知道我说清楚没有, 但我觉得我没说清楚.