Cantor Expansion

定义

一种序列到自然数域的双射。

\[\begin{cases} f(a)=\sum\limits_{i=1}^n A_i(n-i)! \\ A_i=\sum\limits_{j=i}^n [a_j<a_i] \end{cases} \]

求解这类问题有两个入手角度:

  • 逆序对类问题
  • 进制类问题

进制角度:由于阶乘之间的相互独立性,事实上 \(A\) 序列可以被看作是一个进制串,只不过每一位进制都不一样(雾
逆序对角度:\(A\) 序列事实上就是 \(a\) 每一位的逆序对个数。

例题

逆康托展开:求出 \(A_i\) 后,得到了原 \(a\) 序列对应的逆序对,从左到右直接填数,用 \(\text{BIT}\) 或线段树维护即可。

Dove Loves Permutation

利用康托展开转化为逆序对模型,然后算贡献。

CF501D Misha and Permutations Summation

先求出两个序列各自的 \(A_i\),合并的时候根据进制合并,然后用逆康托展开求出最终序列即可。

CF1443E Long Permutation

只维护最后 \(15\) 位的 \(A_i\),每次查询区间和时变换为排列计算即可。

posted @ 2020-10-30 10:55  tommymio  阅读(62)  评论(0编辑  收藏  举报