← Home
For problem statement at 0-999/200-299/290-299/292/problemE.txt this is a correct solution, but verifier at 0-999/200-299/290-299/292/verifierE.go ends with All tests passed can you fix the verifier? package main

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

type Query struct {
	x, y int
}

var (
	tree []int
	a    []int
	b    []int
)

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

func query(node, l, r, pos int) int {
	res := tree[node]
	if l == r {
		return res
	}
	mid := (l + r) / 2
	if pos <= mid {
		childRes := query(node*2, l, mid, pos)
		if childRes > res {
			res = childRes
		}
	} else {
		childRes := query(node*2+1, mid+1, r, pos)
		if childRes > res {
			res = childRes
		}
	}
	return res
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	scanner.Buffer(make([]byte, 1024*1024), 10*1024*1024)

	nextInt := func() int {
		scanner.Scan()
		res, _ := strconv.Atoi(scanner.Text())
		return res
	}

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())
	m := nextInt()

	a = make([]int, n+1)
	for i := 1; i <= n; i++ {
		a[i] = nextInt()
	}

	b = make([]int, n+1)
	for i := 1; i <= n; i++ {
		b[i] = nextInt()
	}

	tree = make([]int, 4*n+1)
	queries := make([]Query, m+1)
	timer := 0

	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	for i := 0; i < m; i++ {
		t := nextInt()
		if t == 1 {
			x := nextInt()
			y := nextInt()
			k := nextInt()
			timer++
			queries[timer] = Query{x, y}
			update(1, 1, n, y, y+k-1, timer)
		} else {
			pos := nextInt()
			id := query(1, 1, n, pos)
			if id == 0 {
				fmt.Fprintln(out, b[pos])
			} else {
				val := a[queries[id].x+pos-queries[id].y]
				fmt.Fprintln(out, val)
			}
		}
	}
}