For problem statement at 2000-2999/2000-2099/2000-2009/2009/problemG3.txt this is a correct solution, but verifier at 2000-2999/2000-2099/2000-2009/2009/verifierG3.go ends with candidate execution failed: exit status 2
panic: runtime error: index out of range [0] with length 0
goroutine 1 [running]:
main.nextInt({0x4000076000?, 0x400003e018?, 0x16d440?}, 0x3a56c?)
/tmp/build-1638733287/solution.go:17 +0xec
main.main()
/tmp/build-1638733287/solution.go:56 +0x4c
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"io"
"os"
"strconv"
)
func nextInt(data []byte, p *int) int {
n := len(data)
i := *p
for i < n && (data[i] < '0' || data[i] > '9') && data[i] != '-' {
i++
}
sign := 1
if data[i] == '-' {
sign = -1
i++
}
val := 0
for i < n && data[i] >= '0' && data[i] <= '9' {
val = val*10 + int(data[i]-'0')
i++
}
*p = i
return val * sign
}
func bitAdd(bit []int64, n, idx int, val int64) {
for idx <= n {
bit[idx] += val
idx += idx & -idx
}
}
func addLeft(bitA, bitB []int64, n, i, p int, coeff int64) {
end1 := p + 1
c1 := coeff * int64(i-p)
bitAdd(bitB, n, 1, c1)
bitAdd(bitB, n, end1+1, -c1)
l2 := end1 + 1
if l2 <= i {
alpha := -coeff
beta := coeff * int64(i+1)
bitAdd(bitA, n, l2, alpha)
bitAdd(bitA, n, i+1, -alpha)
bitAdd(bitB, n, l2, beta)
bitAdd(bitB, n, i+1, -beta)
}
}
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
t := nextInt(data, &p)
out := make([]byte, 0, 1<<20)
for ; t > 0; t-- {
n := nextInt(data, &p)
k := nextInt(data, &p)
q := nextInt(data, &p)
cidx := make([]int, n+1)
for i := 1; i <= n; i++ {
v := nextInt(data, &p)
cidx[i] = v - i + n
}
m := n - k + 1
cnt := make([]int, 2*n+2)
freq := make([]int, k+2)
B := make([]int, m+1)
maxFreq := 0
for i := 1; i <= k; i++ {
id := cidx[i]
old := cnt[id]
if old > 0 {
freq[old]--
}
old++
cnt[id] = old
freq[old]++
if old > maxFreq {
maxFreq = old
}
}
B[1] = maxFreq
for s := 2; s <= m; s++ {
id := cidx[s-1]
old := cnt[id]
freq[old]--
old--
cnt[id] = old
if old > 0 {
freq[old]++
}
for maxFreq > 0 && freq[maxFreq] == 0 {
maxFreq--
}
id = cidx[s+k-1]
old = cnt[id]
if old > 0 {
freq[old]--
}
old++
cnt[id] = old
freq[old]++
if old > maxFreq {
maxFreq = old
}
B[s] = maxFreq
}
P := make([]int, m+1)
N := make([]int, m+1)
stack := make([]int, m)
top := 0
for i := 1; i <= m; i++ {
for top > 0 && B[stack[top-1]] <= B[i] {
top--
}
if top > 0 {
P[i] = stack[top-1]
}
stack[top] = i
top++
}
top = 0
for i := m; i >= 1; i-- {
for top > 0 && B[stack[top-1]] < B[i] {
top--
}
if top > 0 {
N[i] = stack[top-1]
} else {
N[i] = m + 1
}
stack[top] = i
top++
}
headQ := make([]int, m+1)
for i := range headQ {
headQ[i] = -1
}
qL := make([]int, q)
nextQ := make([]int, q)
ans := make([]int64, q)
for i := 0; i < q; i++ {
l := nextInt(data, &p)
r := nextInt(data, &p)
rr := r - k + 1
qL[i] = l
nextQ[i] = headQ[rr]
headQ[rr] = i
}
headM := make([]int, m+1)
for i := range headM {
headM[i] = -1
}
nextM := make([]int, m+1)
for i := 1; i <= m; i++ {
if N[i] <= m {
nextM[i] = headM[N[i]]
headM[N[i]] = i
}
}
nbit := m + 1
size64 := nbit + 1
bits := make([]int64, size64*6)
u1a := bits[0:size64]
u1b := bits[size64 : 2*size64]
u2a := bits[2*size64 : 3*size64]
u2b := bits[3*size64 : 4*size64]
sa := bits[4*size64 : 5*size64]
sb := bits[5*size64 : 6*size64]
for R := 1; R <= m; R++ {
for i := headM[R]; i != -1; i = nextM[i] {
c := int64(B[i])
addLeft(u1a, u1b, nbit, i, P[i], -c)
addLeft(u2a, u2b, nbit, i, P[i], -c*int64(i))
addLeft(sa, sb, nbit, i, P[i], c*int64(N[i]-i))
}
i := R
c := int64(B[i])
addLeft(u1a, u1b, nbit, i, P[i], c)
addLeft(u2a, u2b, nbit, i, P[i], c*int64(i))
for qi := headQ[R]; qi != -1; qi = nextQ[qi] {
l := qL[qi]
x := l
var a1, b1, a2, b2, a3, b3 int64
for x > 0 {
a1 += u1a[x]
b1 += u1b[x]
a2 += u2a[x]
b2 += u2b[x]
a3 += sa[x]
b3 += sb[x]
x -= x & -x
}
u1 := a1*int64(l) + b1
u2 := a2*int64(l) + b2
sv := a3*int64(l) + b3
sumMax := int64(R+1)*u1 - u2 + sv
length := int64(R - l + 1)
ans[qi] = int64(k)*length*(length+1)/2 - sumMax
}
}
for i := 0; i < q; i++ {
out = strconv.AppendInt(out, ans[i], 10)
out = append(out, '\n')
}
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
w.Write(out)
w.Flush()
}
```