For problem statement at 1000-1999/1100-1199/1160-1169/1167/problemF.txt this is a correct solution, but verifier at 1000-1999/1100-1199/1160-1169/1167/verifierF.go ends with All tests passed can you fix the verifier? package main
import (
"fmt"
"io"
"os"
"sort"
)
type pair struct {
val int
idx int
}
const M = 1000000007
func main() {
buf, _ := io.ReadAll(os.Stdin)
pos := 0
readInt := func() int {
for pos < len(buf) && (buf[pos] < '0' || buf[pos] > '9') && buf[pos] != '-' {
pos++
}
if pos == len(buf) {
return 0
}
sign := 1
if buf[pos] == '-' {
sign = -1
pos++
}
res := 0
for pos < len(buf) && buf[pos] >= '0' && buf[pos] <= '9' {
res = res*10 + int(buf[pos]-'0')
pos++
}
return res * sign
}
n := readInt()
if n == 0 {
return
}
a := make([]int, n+1)
pairs := make([]pair, n)
for i := 1; i <= n; i++ {
a[i] = readInt()
pairs[i-1] = pair{val: a[i], idx: i}
}
sort.Slice(pairs, func(i, j int) bool {
return pairs[i].val < pairs[j].val
})
rank := make([]int, n+1)
for i := 0; i < n; i++ {
rank[pairs[i].idx] = i + 1
}
bit := make([]int64, n+1)
add := func(idx int, val int64) {
for idx <= n {
bit[idx] = (bit[idx] + val) % M
idx += idx & -idx
}
}
query := func(idx int) int64 {
var sum int64 = 0
for idx > 0 {
sum = (sum + bit[idx]) % M
idx -= idx & -idx
}
return sum
}
sumLeft := make([]int64, n+1)
for i := 1; i <= n; i++ {
sumLeft[i] = query(rank[i] - 1)
add(rank[i], int64(i))
}
for i := 1; i <= n; i++ {
bit[i] = 0
}
sumRight := make([]int64, n+1)
for i := n; i >= 1; i-- {
sumRight[i] = query(rank[i] - 1)
add(rank[i], int64(n-i+1))
}
var ans int64 = 0
for i := 1; i <= n; i++ {
term1 := int64(i) * int64(n-i+1) % M
term2 := int64(n-i+1) * sumLeft[i] % M
term3 := int64(i) * sumRight[i] % M
Ci := (term1 + term2 + term3) % M
val := int64(a[i]) % M
ans = (ans + val*Ci) % M
}
fmt.Println(ans)
}