#P16509. [NEERC2008 Northern]芬威克树
[NEERC2008 Northern]芬威克树
(Fenwick Tree)
题目描述
芬威克树是一种能够高效支持前缀和查询的数据结构。
对于正整数 ,记 为满足 的最大非负整数 。例如:
- ;
- 。
令
例如 ,。
给定一个长度为 的整数数组
它的芬威克树定义为数组
其中
因此:
$$\begin{aligned} 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],\\ &\ \vdots \end{aligned}$$例如,数组
对应的芬威克树为
如果一个数组与它自己的芬威克树完全相同,则称它为一个自芬威克数组。
例如,上面的数组不是自芬威克数组,而
是自芬威克数组。
现在给定一个数组 。你可以修改其中若干个元素的值,但不能改变元素的顺序。你需要得到一个新的自芬威克数组 ,并使被修改的元素个数尽可能少。
请输出任意一种最优方案。
输入格式
第一行包含一个整数 ,表示数组长度。
第二行包含 个整数,表示数组 。
输出格式
输出 个整数,表示得到的自芬威克数组 。
如果存在多种最优方案,输出任意一种即可。
样例
输入
6
3 -1 4 1 -5 9
输出
0 -1 1 1 0 9
数据范围
- ;
- 。