Fenwick Tree | 프로그래밍의 벗 PivotOJ
PivotOJ

Fenwick Tree

시간 제한: 3000ms메모리 제한: 256MB출처: NEERC Northern Subregional 2008BOJ 3576

문제

Fenwick tree is a data structure effectively supporting prefix sum queries.

For a number tt denote as h(t)h(t) maximal kk such that tt is divisible by 2k2^k. For example, h(24)=3h(24) = 3, h(5)=0h(5) = 0. Let l(t)=2h(t)l(t) = 2^{h(t)}, for example, l(24)=8,l(5)=1l(24) = 8, l(5) = 1.

Consider array a[1],a[2],,a[n]a[1], a[2], \dots , a[n] of integer numbers. Fenwick tree for this array is the array b[1],b[2],,b[n]b[1], b[2], \dots , b[n] such that b[i]=j=il(i)+1ia[j].b[i] = \sum_{j=i-l(i)+1}^{i}{a[j]}\text{.}

So

b[1]=a[1],b[2]=a[1]+a[2],b[3]=a[3],b[4]=a[1]+a[2]+a[3]+a[4],b[5]=a[5],b[6]=a[5]+a[6],\begin{align*}& b[1] = a[1], \\ & b[2] = a[1] + a[2], \\ & b[3] = a[3], \\ & b[4] = a[1] + a[2] + a[3] + a[4], \\ & b[5] = a[5], \\ & b[6] = a[5] + a[6], \\ & \ldots \end{align*}

For example, the Fenwick tree for the array a = (3,−1,4,1,−5,9) is the array b = (3,2,4,7,−5,4)\text{.}

Let us call an array self-fenwick if it coincides with its Fenwick tree. For example, the array above is not self-fenwick, but the array a = (0, −1, 1, 1, 0, 9) is self-fenwick.

You are given an array a. You are allowed to change values of some elements without changing their order to get a new array a′ which must be self-fenwick. Find the way to do it by changing as few elements as possible.

입력

The first line of the input file contains n — the number of elements in the array (1 ≤ n ≤ 100 000). The second line contains n integer numbers — the elements of the array. The elements do not exceed 109 by their absolute values.

출력

Output n numbers — the elements of the array a′. If there are several solutions, output any one.

예제

예제 1

입력
6
3 -1 4 1 -5 9
출력
0 -1 1 1 0 9
코드를 제출하려면 로그인하세요.