#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 10;
int L, R;
int a[maxn * 3];
int f[maxn];
int maxv[maxn << 4];
void build(int o, int l, int r) {
  if (l == r) {
    maxv[o] = a[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(o << 1, l, mid);
  build(o << 1 | 1, mid + 1, r);
  maxv[o] = max(maxv[o << 1], maxv[o << 1 | 1]);
}
int query(int o, int l, int r) {
  if (L <= l && R >= r) return maxv[o];
  int mid = (l + r) >> 1;
  int ret = 0;
  if (L <= mid) ret = max(ret, query(o << 1, l, mid));
  if (R > mid) ret = max(ret, query(o << 1 | 1, mid + 1, r));
  return ret;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    a[i + 2 * n] = a[i + n] = a[i];
  }
  build(1, 1, 3 * n);
  int mx = a[1];
  for (int i = 2; i <= 2 * n; i++) {
    if (a[i] * 2 < mx) {
      f[1] = i - 1;
      break;
    }
    mx = max(mx, a[i]);
  }
  if (!f[1]) f[1] = 2 * n;
  for (int i = 2; i <= n; i++) {
    L = i;
    R = i + f[i - 1] - 2;
    mx = query(1, 1, 3 * n);
    for (int j = R + 1; j <= i + 2 * n; j++) {
      if (a[j] * 2 < mx) {
        f[i] = j - i;
        break;
      }
      mx = max(mx, a[j]);
    }
    if (!f[i]) f[i] = 2 * n;
  }
  for (int i = 1; i <= n; i++) {
    if (f[i] == 2 * n)
      printf("-1 ");
    else
      printf("%d ", f[i]);
  }
  return 0;
}
