P4769-[NOI2018]冒泡排序【组合数学,树状数组】
1|0正题
题目链接:https://www.luogu.com.cn/problem/P4769
1|1题目大意
有一个冒泡排序的算法
然后给出一个排列,求在所有字典序大于的排列中冒泡排序交换次数恰好为的排列数。
1|2解题思路
打一下表发现合法的排列条件是最长下降子序列不超过。
然后我们先不考虑字典序限制条件怎么做,我们设表示目前下降子序列长度为中末尾最大的那个。
那么就是目前出现的数中最大的,然后如果我们从前往后填数,那么如果的数中有没有填进去的,肯定不合法,所以肯定比目前没有填进去的数中所有数字都小,不需要考虑。
设表示目前还剩下个数没填,其中大于其中的个数,那么有可以转移到(填在最底)和(填在上面)。
我们考虑快速的求出每个,反过来就是转移到和。
我们维护一个,那么每次的转移就是转移到
这个转移很像卡特兰数的要求,每次可以往下或者往右,但是不能超过对角线。
这样来说移动到位置的话方案数就是。
然后就是枚举第一个超过该字典序的位置,这样前面的方案固定,剩下的数可以用树状数组计算得出,再用组合数求答案即可。
时间复杂度:
1|3code
__EOF__

本文作者:QuantAsk
本文链接:https://www.cnblogs.com/QuantAsk/p/16420269.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/QuantAsk/p/16420269.html
关于博主:退役OIer,GD划水选手
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-06-28 P3964-[TJOI2013]松鼠聚会【计算几何】
2021-06-28 AT2667-[AGC017D]Game on Tree【SG函数】
2021-06-28 P5163-WD与地图【tarjan,整体二分,线段树合并】