#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
const int inf = 0x3f3f3f3f;
int a[N];
int n;
int min1[N << 2], max1[N << 2];
void pushup(int id) {
  min1[id] = min(min1[id << 1], min1[id << 1 | 1]);
  max1[id] = max(max1[id << 1], max1[id << 1 | 1]);
}
void build(int id, int l, int r) {
  if (l == r) {
    min1[id] = a[l];
    max1[id] = a[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(id << 1, l, mid);
  build(id << 1 | 1, mid + 1, r);
  pushup(id);
}
int query_min(int id, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) {
    return min1[id];
  }
  int mid = (l + r) >> 1;
  int res = inf;
  if (ql <= mid) res = min(res, query_min(id << 1, l, mid, ql, qr));
  if (qr > mid) res = min(res, query_min(id << 1 | 1, mid + 1, r, ql, qr));
  return res;
}
int query_max(int id, int l, int r, int ql, int qr) {
  if (ql <= l && r <= qr) {
    return max1[id];
  }
  int mid = (l + r) >> 1;
  int res = 0;
  if (ql <= mid) res = max(res, query_max(id << 1, l, mid, ql, qr));
  if (qr > mid) res = max(res, query_max(id << 1 | 1, mid + 1, r, ql, qr));
  return res;
}
bool check(int ql, int qr) {
  int mx = query_max(1, 1, 3 * n, ql, qr - 1);
  if (a[qr] * 2 < mx) return false;
  return true;
}
int ans[N];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    a[i + n] = a[i];
    a[i + 2 * n] = a[i];
  }
  build(1, 1, 3 * n);
  int cur1 = 1, cur2 = 1;
  for (cur1 = 1; cur1 <= n; cur1++) {
    cur2 = max(cur2, cur1 + 1);
    while (check(cur1, cur2) && cur2 <= 3 * n) {
      cur2++;
    }
    if (cur2 != 3 * n + 1)
      printf("%d ", cur2 - cur1);
    else
      printf("-1 ");
  }
  printf("\n");
  return 0;
}
