康托展开
康托展开用于求 $1 \sim n$ 的排列在所有排列中的字典序排名,用树状数组维护未使用过的数中比当前数小的个数。预处理阶乘 $O(n)$,单次展开 $O(n \log n)$。
1 |
|
提示
树状数组维护的是值域上每个数是否已经出现(从后往前扫描),query(a[i]) 统计的是已经扫过的数中比 $a[i]$ 小的个数,即原公式中的 $c_{a[i]}$。
相关笔记:【组合数学】康托展开 学习笔记
康托展开用于求 $1 \sim n$ 的排列在所有排列中的字典序排名,用树状数组维护未使用过的数中比当前数小的个数。预处理阶乘 $O(n)$,单次展开 $O(n \log n)$。
1 |
|
树状数组维护的是值域上每个数是否已经出现(从后往前扫描),query(a[i]) 统计的是已经扫过的数中比 $a[i]$ 小的个数,即原公式中的 $c_{a[i]}$。
相关笔记:【组合数学】康托展开 学习笔记