sduacmDiv1-Inversion

题目描述:给定n(10^5)个数[1,n],删去连续的m个数,使剩下的数逆序对最少。

提前声明:此题方向有些偏差,导致没能A掉,借鉴某神的博客,有一些收获。

知识:关于树状数组求解逆序对,其实就是加入a[i]元素,则此数对于ans的贡献就是

sum(a[i]-1),所以用树状数组求逆序对的复杂度是O(n*log(MAX)),其中max为最大元素。

思路:这道题思路大致有两个方向,第一个方向,在这n-m个数上去求解;第二个方向:在删去的m个数上求解。但是感觉第一个方向不好下手,遂在第二个方向上努力,去要求得m个数中贡献的逆序对数量,可以先正着做一遍树状数组,存到f数组,再倒着做一遍,对于[l,r]贡献就是∑f[i]+g[i],但是算重了一部分,就是[l,r]这一部分的逆序对,所以就用到上篇博客的做法了。然后再来说一下第一个方向,直接看变化的n-m个数,每次在中间位置换掉一个数,而对于一个数对于区间逆序对的贡献就简单了,不必考虑算重的情况。还是维护两个树状数组,对于区间[1,k-1],[k+1,n]把a[k]改变成另外一个值,先删除[1,k-1]中比a[k]大的元素个数以及[k+1,n]中比它小的个数,再加上新的数对答案的贡献即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值