For problem statement at 1000-1999/1000-1099/1040-1049/1042/problemD.txt this is a correct solution, but verifier at 1000-1999/1000-1099/1040-1049/1042/verifierD.go ends with all 100 tests passed can you fix the verifier? package main
import (
"bufio"
"fmt"
"os"
)
func readInt(reader *bufio.Reader) int64 {
var n int64
var sign int64 = 1
var b byte
var err error
for {
b, err = reader.ReadByte()
if err != nil {
return 0
}
if b == '-' {
sign = -1
continue
}
if b >= '0' && b <= '9' {
n = int64(b - '0')
break
}
}
for {
b, err = reader.ReadByte()
if err != nil || b < '0' || b > '9' {
break
}
n = n*10 + int64(b-'0')
}
return n * sign
}
func mergeSortAndCount(S []int64, t int64, temp []int64) int64 {
if len(S) <= 1 {
return 0
}
mid := len(S) / 2
left := S[:mid]
right := S[mid:]
count := mergeSortAndCount(left, t, temp) + mergeSortAndCount(right, t, temp)
i := 0
for j := 0; j < len(right); j++ {
for i < len(left) && left[i] <= right[j]-t {
i++
}
count += int64(len(left) - i)
}
i = 0
j := 0
k := 0
for i < len(left) && j < len(right) {
if left[i] <= right[j] {
temp[k] = left[i]
i++
} else {
temp[k] = right[j]
j++
}
k++
}
for i < len(left) {
temp[k] = left[i]
i++
k++
}
for j < len(right) {
temp[k] = right[j]
j++
k++
}
copy(S, temp[:len(S)])
return count
}
func main() {
reader := bufio.NewReaderSize(os.Stdin, 65536)
n := int(readInt(reader))
t := readInt(reader)
S := make([]int64, n+1)
for i := 1; i <= n; i++ {
S[i] = S[i-1] + readInt(reader)
}
temp := make([]int64, n+1)
ans := mergeSortAndCount(S, t, temp)
fmt.Println(ans)
}