康托展开
题目
求一个排列在\(1\)~\(N\)的全排列中的排名。
解析
从第一个数开始考虑,比它小的排列第一个数一定比它小,设为\(k\)个。
后面的数可以乱排,方案数是\(k\times
(n-1)!\)。
后面的数同理,不能再用前面出现的数。
每一次都要找比当前数小的数个数,用权值树状数组维护。
时间复杂度\(\mathjaxcal{O}(n\log
n)\)
代码
1 |
|
康托展开
https://widsnoy.top/posts/f65b/
求一个排列在\(1\)~\(N\)的全排列中的排名。
从第一个数开始考虑,比它小的排列第一个数一定比它小,设为\(k\)个。
后面的数可以乱排,方案数是\(k\times
(n-1)!\)。
后面的数同理,不能再用前面出现的数。
每一次都要找比当前数小的数个数,用权值树状数组维护。
时间复杂度\(\mathjaxcal{O}(n\log
n)\)
1 |
|