func (t *FenwickTree) QueryRange(i, j int) int {
	return t.Query(j) - t.Query(i-1)
}
QueryRange returns sum in a range
package interval
type FenwickTree struct {
	data []int
	inv  []int
}
func NewFenwickTree(size int) *FenwickTree {
	t := &FenwickTree{
		data: make([]int, size+1),
		inv:  make([]int, size+1),
	}
	return t
}
func (t *FenwickTree) Update(index int, value int) {
	t.UpdateRange(index, index, value)
}
func (t *FenwickTree) UpdateRange(i, j int, value int) {
	t.update(&t.data, i, value)
	t.update(&t.data, j+1, -value)
	t.update(&t.inv, i, value*(i-1))
	t.update(&t.inv, j+1, -value*j)
}
func (t *FenwickTree) Query(index int) int {
	return t.query(&t.data, index)*index - t.query(&t.inv, index)
}