欢迎访问我的pat顶级题解目录哦
题目描述
算法设计
可以利用树状数组来解决这个问题。
由于输入序列的每个元素的值都不会超过 1 0 5 10^5 105,因此我们可以开辟一个长 1 0 5 + 5 10^5+5 105+5的树状数组c
。设计getSum(x)函数表示1到x这些数字在序列中出现次数之和。设计update函数用于更新数字出现次数。
我们要对整个序列A
进行两次遍历,第一次从前向后遍历,针对遍历到的数字A[i]
,求其左侧比A[i]
大的数字出现次数之和,并把结果存储到数组left
中。第二次从后向前遍历,针对遍历到的数字A[i]
,求其右侧比A[i]
小的数字出现次数之和,假设为k,计算