package info.frady.algo;
public class IndexTree {
public static int arr[]={0,1,2,3,4,5,6,7,8,9,10};
public static int cal[]=new int[11];
public static void main(String[] args) {
for (int i = 1; i < arr.length; i++) {
update(i,arr[i]);
}
System.out.println(SUM(5) );
}
public static int lowbit(int x){
return x&(-x);
}
private int SUM(int k){ //求前k项的和.
int sum=0;
while(k>0){
sum=sum+cal[k];
k=k-lowbit(k);
}
return sum;
}
public static void update(int i,int x){ //增加某个元素的大小,给某个节点 i 加上 x
while(i<arr.length){
cal[i]=cal[i]+x; //更新父节点
i=i+lowbit(i);
}
}
}