#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5 + 5;
typedef long long ll;
ll a[N];
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d", &x);
a[i] = a[i - 1] + x;
}
ll sum = 0;
for (int k = 1; k < 35; k++)
{
ll L = 1LL << (k - 1), R = (1LL << k) - 1;
if (k == 1) L = 0;
int l = 0, r = 0;
for (int i = 1; i <= n; i++)
{
l = max(l, i);
while (l <= n && a[l] - a[i - 1] < L)
l++;
r = max(l, r);
while (r <= n && a[r] - a[i - 1] <= R)
r++;
if (l <= r)
sum += ((2LL * i + l + r - 1) * (r - l) / 2) * k;
}
}
printf("%lld\n", sum);
}
return 0;
}
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交