Python, 84 8383 77 bytes
There's probably room for improvement here. Takes both the array and the length of the array, and returns a map.
lambda a,n:map(lambda u:sum[sum(a[u-(2**len(bin(u+1).split("1")[-1])-1)+1:u+1]),for u in range(n))]