For problem statement at 0-999/900-999/900-909/903/problemG.txt this is a correct solution, but verifier at 0-999/900-999/900-909/903/verifierG.go ends with case 1 failed: expected 0 0 0 0 got 0
0
0
0
input:
2 0 3
9 5
1 6
1 5
1 8
exit status 1 can you fix the verifier? package main
import (
"bufio"
"fmt"
"io"
"os"
)
type fastReader struct {
buf []byte
pos int
tail int
in io.Reader
}
func newFastReader(r io.Reader) *fastReader {
return &fastReader{
buf: make([]byte, 1<<16),
in: r,
}
}
func (r *fastReader) nextByte() byte {
if r.pos >= r.tail {
n, _ := r.in.Read(r.buf)
if n == 0 {
return 0
}
r.pos = 0
r.tail = n
}
b := r.buf[r.pos]
r.pos++
return b
}
func (r *fastReader) nextInt() int {
b := r.nextByte()
for b <= 32 && b != 0 {
b = r.nextByte()
}
if b == 0 {
return 0
}
res := 0
for b > 32 {
res = res*10 + int(b-'0')
b = r.nextByte()
}
return res
}
func (r *fastReader) nextInt64() int64 {
b := r.nextByte()
for b <= 32 && b != 0 {
b = r.nextByte()
}
if b == 0 {
return 0
}
var res int64
for b > 32 {
res = res*10 + int64(b-'0')
b = r.nextByte()
}
return res
}
func min(a, b int64) int64 {
if a < b {
return a
}
return b
}
type LazySegTree struct {
minVal []int64
lazy []int64
size int
}
func NewLazySegTree(n int) *LazySegTree {
return &LazySegTree{
minVal: make([]int64, 4*n+4),
lazy: make([]int64, 4*n+4),
size: n,
}
}
func (st *LazySegTree) build(node, l, r int, arr []int64) {
if l == r {
st.minVal[node] = arr[l]
return
}
mid := (l + r) / 2
st.build(2*node, l, mid, arr)
st.build(2*node+1, mid+1, r, arr)
st.minVal[node] = min(st.minVal[2*node], st.minVal[2*node+1])
}
func (st *LazySegTree) push(node int) {
if st.lazy[node] != 0 {
val := st.lazy[node]
st.minVal[2*node] += val
st.lazy[2*node] += val
st.minVal[2*node+1] += val
st.lazy[2*node+1] += val
st.lazy[node] = 0
}
}
func (st *LazySegTree) add(node, l, r, ql, qr int, val int64) {
if ql <= l && r <= qr {
st.minVal[node] += val
st.lazy[node] += val
return
}
st.push(node)
mid := (l + r) / 2
if ql <= mid {
st.add(2*node, l, mid, ql, qr, val)
}
if qr > mid {
st.add(2*node+1, mid+1, r, ql, qr, val)
}
st.minVal[node] = min(st.minVal[2*node], st.minVal[2*node+1])
}
type PointSegTree struct {
minVal []int64
size int
}
func NewPointSegTree(n int) *PointSegTree {
return &PointSegTree{
minVal: make([]int64, 4*n+4),
size: n,
}
}
func (st *PointSegTree) build(node, l, r int, arr []int64) {
if l == r {
st.minVal[node] = arr[l]
return
}
mid := (l + r) / 2
st.build(2*node, l, mid, arr)
st.build(2*node+1, mid+1, r, arr)
st.minVal[node] = min(st.minVal[2*node], st.minVal[2*node+1])
}
func (st *PointSegTree) update(node, l, r, idx int, val int64) {
if l == r {
st.minVal[node] = val
return
}
mid := (l + r) / 2
if idx <= mid {
st.update(2*node, l, mid, idx, val)
} else {
st.update(2*node+1, mid+1, r, idx, val)
}
st.minVal[node] = min(st.minVal[2*node], st.minVal[2*node+1])
}
type Edge struct {
to int
cap int64
}
func main() {
reader := newFastReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
n := reader.nextInt()
if n == 0 {
return
}
m := reader.nextInt()
q := reader.nextInt()
x := make([]int64, n+1)
y := make([]int64, n)
y[0] = 0
for i := 1; i < n; i++ {
x[i] = reader.nextInt64()
y[i] = reader.nextInt64()
}
x[n] = 0
adj := make([][]Edge, n+1)
for i := 0; i < m; i++ {
u := reader.nextInt()
v := reader.nextInt()
cap := reader.nextInt64()
adj[u] = append(adj[u], Edge{to: v, cap: cap})
}
stLazy := NewLazySegTree(n)
stLazy.build(1, 0, n-1, y)
M := make([]int64, n+1)
for i := 1; i <= n; i++ {
for _, edge := range adj[i] {
v := edge.to
stLazy.add(1, 0, n-1, 0, v-1, edge.cap)
}
M[i] = stLazy.minVal[1]
}
ansArr := make([]int64, n+1)
for i := 1; i <= n; i++ {
ansArr[i] = x[i] + M[i]
}
stPoint := NewPointSegTree(n)
stPoint.build(1, 1, n, ansArr)
fmt.Fprintln(out, stPoint.minVal[1])
for i := 0; i < q; i++ {
u := reader.nextInt()
w := reader.nextInt64()
x[u] = w
stPoint.update(1, 1, n, u, x[u]+M[u])
fmt.Fprintln(out, stPoint.minVal[1])
}
}