更新模板

This commit is contained in:
YDZ
2019-09-27 17:55:44 +08:00
parent 6f70b22f2e
commit d6e352b225

View File

@ -10,7 +10,6 @@ type SegmentTree struct {
// Init define // Init define
func (st *SegmentTree) Init(nums []int, oper func(i, j int) int) { func (st *SegmentTree) Init(nums []int, oper func(i, j int) int) {
st.merge = oper st.merge = oper
data, tree, lazy := make([]int, len(nums)), make([]int, 4*len(nums)), make([]int, 4*len(nums)) data, tree, lazy := make([]int, len(nums)), make([]int, 4*len(nums)), make([]int, 4*len(nums))
for i := 0; i < len(nums); i++ { for i := 0; i < len(nums); i++ {
data[i] = nums[i] data[i] = nums[i]
@ -27,8 +26,7 @@ func (st *SegmentTree) buildSegmentTree(treeIndex, left, right int) {
st.tree[treeIndex] = st.data[left] st.tree[treeIndex] = st.data[left]
return return
} }
leftTreeIndex, rightTreeIndex := st.leftChild(treeIndex), st.rightChild(treeIndex) midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex)
midTreeIndex := left + (right-left)>>1
st.buildSegmentTree(leftTreeIndex, left, midTreeIndex) st.buildSegmentTree(leftTreeIndex, left, midTreeIndex)
st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right) st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right)
st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex]) st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex])
@ -207,8 +205,7 @@ func (st *SegmentCountTree) buildSegmentTree(treeIndex, left, right int) {
st.tree[treeIndex] = st.data[left] st.tree[treeIndex] = st.data[left]
return return
} }
leftTreeIndex, rightTreeIndex := st.leftChild(treeIndex), st.rightChild(treeIndex) midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)>>1, st.leftChild(treeIndex), st.rightChild(treeIndex)
midTreeIndex := left + (right-left)>>1
st.buildSegmentTree(leftTreeIndex, left, midTreeIndex) st.buildSegmentTree(leftTreeIndex, left, midTreeIndex)
st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right) st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right)
st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex]) st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex])