← Home
For problem statement at 1000-1999/1200-1299/1290-1299/1295/problemE.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1290-1299/1295/verifierE.go ends with All 100 tests passed can you fix the verifier? package main

import (
	"fmt"
	"io"
	"os"
)

var (
	tree []int64
	lazy []int64
	pref []int64
)

func min(a, b int64) int64 {
	if a < b {
		return a
	}
	return b
}

func build(node, l, r int) {
	if l == r {
		tree[node] = pref[l]
		return
	}
	mid := (l + r) / 2
	build(2*node, l, mid)
	build(2*node+1, mid+1, r)
	tree[node] = min(tree[2*node], tree[2*node+1])
}

func push(node int) {
	if lazy[node] != 0 {
		tree[2*node] += lazy[node]
		lazy[2*node] += lazy[node]
		tree[2*node+1] += lazy[node]
		lazy[2*node+1] += lazy[node]
		lazy[node] = 0
	}
}

func update(node, l, r, ql, qr int, val int64) {
	if ql > r || qr < l {
		return
	}
	if ql <= l && r <= qr {
		tree[node] += val
		lazy[node] += val
		return
	}
	push(node)
	mid := (l + r) / 2
	update(2*node, l, mid, ql, qr, val)
	update(2*node+1, mid+1, r, ql, qr, val)
	tree[node] = min(tree[2*node], tree[2*node+1])
}

func main() {
	buffer, _ := io.ReadAll(os.Stdin)
	var cursor int

	next := func() int64 {
		for cursor < len(buffer) && buffer[cursor] <= ' ' {
			cursor++
		}
		if cursor >= len(buffer) {
			return 0
		}
		res := int64(0)
		for cursor < len(buffer) && buffer[cursor] > ' ' {
			res = res*10 + int64(buffer[cursor]-'0')
			cursor++
		}
		return res
	}

	n := int(next())
	if n == 0 {
		return
	}

	p := make([]int, n+1)
	posOf := make([]int, n+1)
	for i := 1; i <= n; i++ {
		p[i] = int(next())
		posOf[p[i]] = i
	}

	a := make([]int64, n+1)
	pref = make([]int64, n+1)
	for i := 1; i <= n; i++ {
		a[i] = next()
		pref[i] = pref[i-1] + a[i]
	}

	tree = make([]int64, 4*n)
	lazy = make([]int64, 4*n)

	build(1, 1, n-1)

	ans := tree[1]

	for V := 1; V <= n; V++ {
		pos := posOf[V]
		if 1 <= pos-1 {
			update(1, 1, n-1, 1, pos-1, a[pos])
		}
		if pos <= n-1 {
			update(1, 1, n-1, pos, n-1, -a[pos])
		}
		if tree[1] < ans {
			ans = tree[1]
		}
	}

	fmt.Println(ans)
}