let bsize n = let rec loop i = if i land n != 0 then i else loop (2*i) in loop 1 let solve n a = let answer = Array.copy a in let rec scan i = if i>n then () else ( (* will be doing the even numbers *) let b = bsize i in let rec sum a c accum = if a>c then accum else sum (a+1) c ((answer.(a))+accum) in let s = sum (i-b+1) (i-1) 0 in if s!=0 then answer.(i-1) <- answer.(i-1) - s; scan (i+2) ) in scan 2; answer let main () = let read_int () = Scanf.bscanf Scanf.Scanning.stdib " %d " (fun x -> x) in let n = read_int() in let a = Array.make (n+1) 0 in for i=1 to n do a.(i) <- read_int() done; let answer = solve n a in for i=1 to n do Printf.printf "%d\n" answer.(i) done; ;; main()