定义
一种序列到自然数域的双射。
[egin{cases}
f(a)=sumlimits_{i=1}^n A_i(n-i)!
\
A_i=sumlimits_{j=i}^n [a_j<a_i]
end{cases}
]
求解这类问题有两个入手角度:
- 逆序对类问题
- 进制类问题
进制角度:由于阶乘之间的相互独立性,事实上 (A) 序列可以被看作是一个进制串,只不过每一位进制都不一样(雾
逆序对角度:(A) 序列事实上就是 (a) 每一位的逆序对个数。
例题
逆康托展开:求出 (A_i) 后,得到了原 (a) 序列对应的逆序对,从左到右直接填数,用 ( ext{BIT}) 或线段树维护即可。
利用康托展开转化为逆序对模型,然后算贡献。
CF501D Misha and Permutations Summation
先求出两个序列各自的 (A_i),合并的时候根据进制合并,然后用逆康托展开求出最终序列即可。
只维护最后 (15) 位的 (A_i),每次查询区间和时变换为排列计算即可。