← Home
```go
package main

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

func readInt(in *bufio.Reader) int64 {
	var n int64
	var c byte
	var err error
	for {
		c, err = in.ReadByte()
		if err != nil || (c >= '0' && c <= '9') {
			break
		}
	}
	for err == nil && c >= '0' && c <= '9' {
		n = n*10 + int64(c-'0')
		c, err = in.ReadByte()
	}
	return n
}

func check(x int64, h []int64) bool {
	n := len(h)
	add := make([]int64, n)
	for i := n - 1; i >= 2; i-- {
		if h[i]+add[i] < x {
			return false
		}
		max3d := h[i]
		if h[i]+add[i]-x < max3d {
			max3d = h[i] + add[i] - x
		}
		d := max3d / 3
		add[i-1] += d
		add[i-2] += 2 * d
	}
	if h[1]+add[1] < x {
		return false
	}
	if h[0]+add[0] < x {
		return false
	}
	return true
}

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	t := int(readInt(in))
	for tc := 0; tc < t; tc++ {
		n := int(readInt(in))
		h := make([]int64, n)
		var maxH int64
		for i := 0; i < n; i++ {
			h[i] = readInt(in)
			if h[i] > maxH {
				maxH = h[i]
			}
		}

		left, right := int64(0), maxH
		var ans int64
		for left <= right {
			mid := left + (right - left) / 2
			if check(mid, h) {
				ans = mid
				left = mid + 1
			} else {
				right = mid - 1
			}
		}
		fmt.Fprintln(out, ans)
	}
}
```