[NOI Online #1 提高组]冒泡排序 题解
思维题。需要弄清
- 冒泡排序的本质
- 每一轮冒泡排序对逆序对的影响
冒泡排序的本质是将一个数放到他的“后面第一个大于”之前,并把它俩之间的数向左平移一位。
这个数能够向右征服的充要条件是左边没有比它大的数。原因是,一旦有,他就成了被征服的,手无缚鸡之力。
因此,每一轮冒泡排序会使每一个数值上的逆序对 (如果小于 0 了就再和 0 取 max)。原因是,一个数要么被征服,要么征服别人,被征服的,它左边就少了一个大于它的数,征服别人的,原来的逆序对数就是 0,不妨碍 -1 再取 max。
因此,第 轮冒泡排序结束后的总逆序对数就是
是数值 上的逆序对数。
显然可以用值域树状数组维护。
修改和询问就显得很简单了,只需要在 上查询即可。
另外,代码实现方面,需要三个树状数组 , 是最开始算逆序对的, 分别用于记录 的值域上的【出现次数】和【出现次数】,意会一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】