pat顶级1027 Larry and Inversions (35 分)

欢迎访问我的pat顶级题解目录

题目描述

pat顶级1027 Larry and Inversions (35 分)题目描述

算法设计

可以利用树状数组来解决这个问题。
由于n不会超过 1 0 3 10^3 103 ,因此我们可以开辟一个长1005的树状数组c。设计getSum(x)函数表示1到x这些数字在序列中出现次数之和。设计update函数用于更新数字出现次数。
首先我们要明白如果我们定义A[i]左侧比A[i]大的数字个数为S[i],那么对于序列A[i]~A[j],其逆序数为 ∑ k = i j S k \sum _{k=i}^j S_k k=ijSk。我们可以通过树状数组求解A[i]左侧比A[i]大的数字个数,进而可以求解一个序列的逆序数。建立一个二维数组ans,存储每个区间的逆序数,即ans[i][j]表示序列A[i]~A[j]的逆序个数。
接下来,假设我们求得序列A[i]~A[j]的逆序数为ans[i][j],由于序列A[i]~A[j]任选两个数的情况数为 C j − i + 1 2 = ( j − i + 1 ) ( j − i ) 2 C_{j-i+1}^2=\frac {(j-i+1)(j-i)} 2 Cji+12=

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值