public class SegTree {
int[] value, nums;
int n;//表示nums数组的⻓度
SegTree(int n, int[] nums) {
this.value = new int[4 * n];
this.n = n;
this.nums = nums;
build(1, 0, n - 1);
}
private void build(int index, int left, int right) {
if (left == right) {
value[index] = nums[left];
return;
}
int mid = (left + right) / 2;
build(2 * index, left, mid);
build(2 * index + 1, mid + 1, right);
value[index] = value[2 * index] + value[2 * index + 1];
}
public int query(int index, int left, int right, int qleft, int qright) {
if (qleft > right || qright < left) return 0;
if (qleft <= left && qright >= right) return value[index];
int mid = (left + right) / 2;
return query(2 * index, left, mid, qleft, qright) + query(2 * index + 1, mid + 1, right, qleft, qright);
}
}
构造线段树
最新推荐文章于 2024-05-11 10:24:57 发布