← Home
package main

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

func main() {
	in := bufio.NewReader(os.Stdin)
	n := readInt(in)

	a := make([]int32, n)
	for i := 0; i < n; i++ {
		a[i] = int32(readInt(in))
	}

	left := make([]int32, n)
	stack := make([]int32, 0, n)
	for i := 0; i < n; i++ {
		for len(stack) > 0 && a[stack[len(stack)-1]] > a[i] {
			stack = stack[:len(stack)-1]
		}
		if len(stack) == 0 {
			left[i] = int32(i)
		} else {
			left[i] = int32(i) - stack[len(stack)-1] - 1
		}
		stack = append(stack, int32(i))
	}

	right := make([]int32, n)
	stack = stack[:0]
	for i := n - 1; i >= 0; i-- {
		for len(stack) > 0 && a[stack[len(stack)-1]] >= a[i] {
			stack = stack[:len(stack)-1]
		}
		if len(stack) == 0 {
			right[i] = int32(n - 1 - i)
		} else {
			right[i] = stack[len(stack)-1] - int32(i) - 1
		}
		stack = append(stack, int32(i))
	}

	diff2 := make([]int64, n+3)
	for i := 0; i < n; i++ {
		A := left[i] + 1
		B := right[i] + 1
		if A > B {
			A, B = B, A
		}
		v := int64(a[i])
		diff2[1] += v
		diff2[A+1] -= v
		diff2[B+1] -= v
		diff2[A+B+1] += v
	}

	S := make([]int64, n+2)
	var currentDiff int64 = 0
	var currentSum int64 = 0
	for k := 1; k <= n; k++ {
		currentDiff += diff2[k]
		currentSum += currentDiff
		S[k] = currentSum
	}

	m := readInt(in)
	out := bufio.NewWriter(os.Stdout)
	for i := 0; i < m; i++ {
		k := readInt(in)
		ans := float64(S[k]) / float64(n-k+1)
		if i > 0 {
			out.WriteByte(' ')
		}
		fmt.Fprintf(out, "%.15f", ans)
	}
	out.WriteByte('\n')
	out.Flush()
}

func readInt(in *bufio.Reader) int {
	var res int
	var sign int = 1
	var c byte
	for {
		c, _ = in.ReadByte()
		if c == '-' || (c >= '0' && c <= '9') {
			break
		}
	}
	if c == '-' {
		sign = -1
		c, _ = in.ReadByte()
	}
	for {
		res = res*10 + int(c-'0')
		c, _ = in.ReadByte()
		if c < '0' || c > '9' {
			break
		}
	}
	return res * sign
}