您的位置:首页 > 编程语言 > Java开发

树状数组 java模板(纯代码)

2022-04-04 15:39 561 查看
public class TrieNums {
int n;
/*Nums start from 0*/
int[] storage;
/*TrieNums index start from 1*/
int[] treeNums;

int query(int index){
int ans = 0;
for(int i=index; i > 0; i -= getLowBit(i)) ans += treeNums[i];
return ans;
}

void add(int index, int increase){
for(int i = index; i <= n; i += getLowBit(i)) treeNums[i] += increase;
}
public TrieNums(int[] nums){
this.storage = nums;
this.n = nums.length;
this.treeNums = new int[n + 1];
for (int i = 0; i < n; i++) add(i + 1, storage[i]);
}

public void update(int index, int val){
add(index + 1, val - storage[index]);
storage[index] = val;
}

public int sumRange(int left, int right){
return query(right +1) - query(left);
}

public static int getLowBit(int index){
return index & (-index);
}

}

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: