原题链接:蓝桥杯历届试题-小朋友排队
def add(d, i, x, maxh): while i <= maxh + 1: d[i] += x i += i & -i def _sum(d, i): res = 0 while i > 0: res += d[i] i -= i & -i return res n = int(input()) a = list(map(int, input().split())) d = [0] * 1000005 lr = [0] * 100005 maxh = 0 for i in range(n): a[i] += 1 maxh = max(maxh, a[i]) for i in range(n): add(d, a[i], 1, maxh) lr[i] += i + 1 - _sum(d, a[i]) d = [0] * (maxh + 5) for i in range(n - 1, -1, -1): add(d, a[i], 1, maxh) lr[i] += _sum(d, a[i] - 1) ans = 0 for i in range(n): k = lr[i] ans += k * (k + 1) // 2 # 使用 // 进行整数除法,得到整数结果 print(ans)
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复