给定一个长度为 n 的正整数数组 a。我们定义一个数 x 的 美丽值 如下:
题目要求计算数组 a 中所有连续子数组(即区间)的和的美丽值之和。设某个子数组的和为 S,其贡献为 f(S)(若 S=2k 则 f(S)=k,否则 f(S)=0),要求求
小苯认为一个数x是美丽数,当且仅当:如果将x不停除以2,直到x不整除2时停止,此时x恰好等于1。
如果一个数美丽,则其美丽值为:以上操作中除以2的次数。
否则一个数不美丽,则其美丽值为0。
现在小苯有一个长度为n的数组a,他想知道a中所有连续子数组的和的美丽值之和是多少,请你帮他算一算吧。
形式化的:记数字x的美丽值为f(x)则请你求出
∑t=1n∑r=lnf(al+al+1+...+ar)
(其中al+al+1+...ar表示a数组在[l,r]这一段区间的所有元素之和)
每个测试文件均包含多组测试数据。第一行输入一个整数T(1≤T≤104) 代表数据组数,每组测试数据描述如下:
第一行输入一个正整数n(1≤n≤3×105),表示数组a的长度。
第二行n个正整数a1a2….an(0≤ai<230),表示数组a。
(保证同一个测试文件中的测试数据里,n的总和不超过3×105)
对于每个测试数据,在单独的一行输出一个整数表示答案。
输入
2
5
2 4 4 3 5
4
2 2 2 2
输出
15
13
对于第二组测试数据:{2,2,2,2};
所有长度为1的子区间和都是美丽的,因为2的二进制中只有一个1,其美丽值为1,因此总美丽值为1×4=4;
所有长度为2的子区间和都是美丽的,因为他们的和都是4,4的美丽值为2,其总美丽值为2×3=6。
所有长度为3的子区间和都不是美丽的,因此美丽值总和为0。
唯一一个长度为4的子区间和是美丽的,其总和为8,美丽值为3
综上,所有区间的总美丽值之和为:4+6+0+3=13