#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e6 + 42;
int n;
int arr[nmax];
pair<int, int> tree[nmax * 4];
void build(int node, int l, int r) {
  if (l == r) {
    tree[node] = {arr[l], l};
    return;
  }
  int av = (l + r) / 2;
  build(node * 2, l, av);
  build(node * 2 + 1, av + 1, r);
  tree[node] = min(tree[node * 2], tree[node * 2 + 1]);
}
pair<int, int> query(int node, int l, int r, int lq, int rq) {
  if (l == lq && r == rq) return tree[node];
  int av = (l + r) / 2;
  pair<int, int> ret = {1e9 + 42, 0};
  if (lq <= av) ret = min(ret, query(node * 2, l, av, lq, min(av, rq)));
  if (av < rq)
    ret = min(ret, query(node * 2 + 1, av + 1, r, max(av + 1, lq), rq));
  return ret;
}
double add[nmax], output[nmax];
void solve(int l, int r) {
  if (l > r) return;
  int av = query(1, 1, n, l, r).second;
  solve(l, av - 1);
  solve(av + 1, r);
  int sz_l = av - l + 1, sz_r = r - av + 1;
  if (sz_l > sz_r) swap(sz_l, sz_r);
  for (int j = 1; j <= sz_l; j++) {
    add[j] += arr[av];
    add[j + sz_r] -= arr[av];
  }
}
int main() {
  scanf("%i", &n);
  for (int i = 1; i <= n; i++) scanf("%i", &arr[i]);
  build(1, 1, n);
  solve(1, n);
  for (int i = 1; i <= n; i++) output[i] = output[i - 1] + add[i];
  for (int i = 1; i <= n; i++) output[i] = output[i] / (n - i + 1);
  int q, k;
  scanf("%i", &q);
  for (int i = 1; i <= q; i++) {
    scanf("%i", &k);
    printf("%.9f\n", output[k]);
  }
  return 0;
}
