```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)
}
}
```