ABC 337 G(主席树)
最近刚学完主席树,找了道题巩固一下,还是非常有收获的。
题目链接:problem
若只让求
可是题目要求将
设
画出换根前后的两个图,可以发现:
f(3) = f(1) - 1对红色子树(包括3)的贡献 + 3对蓝色子树(包括1)的贡献
这里的贡献可以理解为逆序对的数量:
红:对于红色子树内的所有点 ,满足 的 的数量
( 作为 )。此贡献在 下移后消失。 蓝:对于蓝色子树内的所有点 ,满足 的 的数量
( 作为 )。此贡献在 上移后产生。而计算这个必须用
( 的总数量)再减去红色子树中 的 的数量得到(注意不能用蓝色子树,因为右图是换根后的想象图,而左图中的红色子树是真实存在的)。
因此,计算
可以发现,若将子树理解为子区间,则问题就转化为:查询给定区间的任意子区间中
而子树恰好可以映射成子区间 -> 只需要处理出
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战