Use this to learn the idea, then write your own version.
1package main2 3import (4 "bufio"5 . "fmt"6 "io"7 "math/bits"8)9 1011const inf42 int = 1e1812 13type mat42 [5][5]int14 15type seg42 []struct {16 l, r int17 val mat4218}19 20func newVal42(a, b int) mat42 {21 return mat42{22 {0, a + b, a + b*2, -inf42, -inf42},23 {-inf42, a, a + b, -inf42, -inf42},24 {-inf42, -inf42, 0, a + b, a + b*2},25 {-inf42, -inf42, -inf42, a, a + b},26 {-inf42, -inf42, -inf42, -inf42, 0},27 }28}29 30func (seg42) mergeInfo(a, b mat42) (c mat42) {31 for i := range 5 {32 for j := range 5 {33 c[i][j] = -inf4234 }35 }36 for i := range 5 {37 for k := i; k < 5; k++ {38 for j := k; j < 5; j++ {39 c[i][j] = max(c[i][j], a[i][k]+b[k][j])40 }41 }42 }43 return44}45 46func (t seg42) build(a [][2]int, o, l, r int) {47 t[o].l, t[o].r = l, r48 if l == r {49 t[o].val = newVal42(a[l][0], a[l][1])50 return51 }52 m := (l + r) >> 153 t.build(a, o<<1, l, m)54 t.build(a, o<<1|1, m+1, r)55 t.maintain(o)56}57 58func (t seg42) update(o, i, a, b int) {59 if t[o].l == t[o].r {60 t[o].val = newVal42(a, b)61 return62 }63 m := (t[o].l + t[o].r) >> 164 if i <= m {65 t.update(o<<1, i, a, b)66 } else {67 t.update(o<<1|1, i, a, b)68 }69 t.maintain(o)70}71 72func (t seg42) maintain(o int) {73 t[o].val = t.mergeInfo(t[o<<1].val, t[o<<1|1].val)74}75 76func (t seg42) query(o, l, r int) mat42 {77 if l <= t[o].l && t[o].r <= r {78 return t[o].val79 }80 m := (t[o].l + t[o].r) >> 181 if r <= m {82 return t.query(o<<1, l, r)83 }84 if m < l {85 return t.query(o<<1|1, l, r)86 }87 return t.mergeInfo(t.query(o<<1, l, r), t.query(o<<1|1, l, r))88}89 90func cf2042F(in io.Reader, _w io.Writer) {91 out := bufio.NewWriter(_w)92 defer out.Flush()93 var n, q, op, p, x int94 Fscan(in, &n)95 a := make([][2]int, n)96 for i := range a {97 Fscan(in, &a[i][0])98 }99 for i := range a {100 Fscan(in, &a[i][1])101 }102 103 t := make(seg42, 2<<bits.Len(uint(n-1)))104 t.build(a, 1, 0, n-1)105 for Fscan(in, &q); q > 0; q-- {106 Fscan(in, &op, &p, &x)107 p--108 if op < 3 {109 a[p][op-1] = x110 t.update(1, p, a[p][0], a[p][1])111 } else {112 Fprintln(out, t.query(1, p, x-1)[0][4])113 }114 }115}116 117118