题目描述
n个小球排成一列,第i个小球颜色为ai
定义小球i与j的距离为 | ( i - j ) * ( a i - a j ) |
求所有小球间距离之和
i 与 j 和 j 与 i 不必重复计算
输入
第一行一个n
第二行给出a1,a2,…,an-1,an
输出
按照题目要求作答
输入样例
5
0 1 1 0 1
输出样例
11
说明
30%: n<=10000
另外40%:n<=100000
100%:n<=1000000,0<=ai<=1
题解:
再输入中处理,当队列中加入一个数 0 or 1
而其的贡献就是其前面的所有与其相反(若本数是 0 则相反数是 1 )的数的位置与其位置的差
因为若两数相同,则 ( a i - a j ) = 0 则不会产生贡献
那就可以实现O ( n ) 了,对于 1 ~ i 这段区间,要记录有多少个 0 ,1 ,及当前 0 ,1产生了多少的贡献
再在每次 i + 1 后将其二者的贡献分别加上其的数量,并修改 0 ,1 的数量
Code
#include <algorithm>