| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
							- func countRangeSum(nums []int, lower int, upper int) int {
 
- 	n := len(nums)
 
- 	sum := make([]int, n+1)
 
- 	for i := 1; i <= n; i++ {
 
- 		sum[i] = sum[i-1] + nums[i-1]
 
- 	}
 
- 	return mergeSort(sum, lower, upper, 0, n+1)
 
- }
 
- func mergeSort(nums []int, lower, upper, beg, end int) int {
 
- 	if end-beg <= 1 {
 
- 		return 0
 
- 	}
 
- 	mid := (beg + end) / 2
 
- 	m, n := mid, mid
 
- 	cnt := mergeSort(nums, lower, upper, beg, mid) + mergeSort(nums, lower, upper, mid, end)
 
- 	for i := beg; i < mid; i++ {
 
- 		for ; m < end && nums[m]-nums[i] < lower; m++ {
 
- 		}
 
- 		for ; n < end && nums[n]-nums[i] <= upper; n++ {
 
- 		}
 
- 		cnt += n - m
 
- 	}
 
- 	merge(nums, beg, mid, end)
 
- 	return cnt
 
- }
 
- func merge(nums []int, beg, mid, end int) {
 
- 	sorted := make([]int, end-beg)
 
- 	i, j, k := 0, beg, mid
 
- 	for ; j < mid && k < end; i++ {
 
- 		if nums[j] < nums[k] {
 
- 			sorted[i] = nums[j]
 
- 			j++
 
- 		} else {
 
- 			sorted[i] = nums[k]
 
- 			k++
 
- 		}
 
- 	}
 
- 	if j != mid {
 
- 		copy(sorted[i:], nums[j:mid])
 
- 	}
 
- 	if k != end {
 
- 		copy(sorted[i:], nums[k:end])
 
- 	}
 
- 	copy(nums[beg:end], sorted)
 
- }
 
 
  |