← Home
For problem statement at 1000-1999/1600-1699/1630-1639/1638/problemE.txt this is a correct solution, but verifier at 1000-1999/1600-1699/1630-1639/1638/verifierE.go ends with case 1 failed: expected:
0
got:

exit status 1 can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var N int = 1000005
var tree []Node = make([]Node, 4*N)
var offset []int64 = make([]int64, N)
var col []int = make([]int, N)
var addv []int64 = make([]int64, N)

type Node struct {
	lazy_add   int64
	lazy_color int
	uniform    int
}

func build(node, tl, tr int) {
	tree[node] = Node{0, -1, 1}
	if tl == tr {
		col[tl] = 1
		offset[tl] = 0
		tree[node].uniform = 1
		return
	}
	mid := (tl + tr) / 2
	build(2*node, tl, mid)
	build(2*node+1, mid+1, tr)
}

func propagate(node, tl, tr int) {
	if tree[node].lazy_add != 0 || tree[node].lazy_color != -1 {
		if tl != tr {
			tree[2*node].lazy_add += tree[node].lazy_add
			if tree[node].lazy_color != -1 {
				tree[2*node].lazy_color = tree[node].lazy_color
				tree[2*node].uniform = tree[node].lazy_color
			}
			tree[2*node+1].lazy_add += tree[node].lazy_add
			if tree[node].lazy_color != -1 {
				tree[2*node+1].lazy_color = tree[node].lazy_color
				tree[2*node+1].uniform = tree[node].lazy_color
			}
		} else {
			offset[tl] += tree[node].lazy_add
			if tree[node].lazy_color != -1 {
				col[tl] = tree[node].lazy_color
			}
			tree[node].uniform = col[tl]
		}
		tree[node].lazy_add = 0
		tree[node].lazy_color = -1
	}
	if tl != tr {
		l := tree[2*node].uniform
		rr := tree[2*node+1].uniform
		if l == rr && l != -1 {
			tree[node].uniform = l
		} else {
			tree[node].uniform = -1
		}
	} else {
		tree[node].uniform = col[tl]
	}
}

func update(node, tl, tr, l, r, new_c int) {
	propagate(node, tl, tr)
	if tl > r || tr < l {
		return
	}
	if l <= tl && tr <= r {
		if tree[node].uniform != -1 {
			old_c := tree[node].uniform
			tree[node].lazy_add += addv[old_c] - addv[new_c]
			tree[node].lazy_color = new_c
			tree[node].uniform = new_c
			return
		}
	}
	mid := (tl + tr) / 2
	update(2*node, tl, mid, l, r, new_c)
	update(2*node+1, mid+1, tr, l, r, new_c)
	lv := tree[2*node].uniform
	rv := tree[2*node+1].uniform
	if lv == rv && lv != -1 {
		tree[node].uniform = lv
	} else {
		tree[node].uniform = -1
	}
}

func get(pos int, node, tl, tr int) int64 {
	propagate(node, tl, tr)
	if tl == tr {
		return offset[tl] + addv[col[tl]]
	}
	mid := (tl + tr) / 2
	if pos <= mid {
		return get(pos, 2*node, tl, mid)
	} else {
		return get(pos, 2*node+1, mid+1, tr)
	}
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	line, _ := reader.ReadString('\n')
	parts := strings.Fields(line)
	n, _ := strconv.Atoi(parts[0])
	q, _ := strconv.Atoi(parts[1])
	build(1, 1, n)
	var answers []string
	for i := 0; i < q; i++ {
		line, _ = reader.ReadString('\n')
		parts = strings.Fields(line)
		typ := parts[0]
		if typ == "Color" {
			l, _ := strconv.Atoi(parts[1])
			r, _ := strconv.Atoi(parts[2])
			c, _ := strconv.Atoi(parts[3])
			update(1, 1, n, l, r, c)
		} else if typ == "Add" {
			c, _ := strconv.Atoi(parts[1])
			x, _ := strconv.ParseInt(parts[2], 10, 64)
			addv[c] += x
		} else if typ == "Query" {
			ii, _ := strconv.Atoi(parts[1])
			val := get(ii, 1, 1, n)
			answers = append(answers, fmt.Sprintln(val))
		}
	}
	for _, ans := range answers {
		fmt.Print(ans)
	}
}
```