求序列的和:
一、用sum数组表示前n项和,归并排序求正逆序对,先算出小组当前的再看小组间的关系
当一个序列的平均数不小于给定的数字k时,我们认为这个序列是美丽的,求给定序列的所有子区间中有多少是美丽的
解:
写的简洁一点, 就是区间(i,j]的平均数 (Sj-Si)/(j-i)≥ k,就是
Sj − Si ≥ kj − ki
Sj − j ≥ Si − ki
令bi = Si − i
题目就成了数i < j且bi ≤ bj 的(i,j)的数目
这是顺序对 数据结构课上讲过归并排序可以求逆序对,在这里我们 用归并排序求顺序对
二、算出每个数字对和的贡献
规定一个序列的美丽度为这个序列中所有数的和,求给定序列的所有子序列的美丽度之和
解:计算每个数对答案的贡献 每个数字被选的次数都是所以答案就是 2 n − 1 ∑ i = 1 n a i 2^{n-1}\sum_{i=1}^{n}a_i 2n−1∑i=1nai