#include <bits/stdc++.h>
using namespace std;
const int maxn = 311111;
const int inf = 0x3f3f3f3f;
struct seg {
  int mi[maxn << 2];
  int mx[maxn << 2];
  int lazy[maxn << 2];
  int a[maxn];
  void init(int *s, int n) {
    for (int i = 1; i <= n; i++) a[i] = s[i];
    memset(lazy, 0, sizeof lazy);
  }
  void up(int rt) {
    mx[rt] = max(mx[rt << 1], mx[rt << 1 | 1]);
    mi[rt] = min(mi[rt << 1], mi[rt << 1 | 1]);
  }
  void down(int rt) {
    if (lazy[rt]) {
      mx[rt << 1] = max(mx[rt << 1], lazy[rt]);
      mx[rt << 1 | 1] = max(mx[rt << 1 | 1], lazy[rt]);
      mi[rt << 1] = min(mi[rt << 1], lazy[rt]);
      mi[rt << 1 | 1] = min(mi[rt << 1 | 1], lazy[rt]);
      lazy[rt << 1] = lazy[rt];
      lazy[rt << 1 | 1] = lazy[rt];
      lazy[rt] = 0;
    }
  }
  void build(int l, int r, int rt) {
    if (l == r) {
      mi[rt] = mx[rt] = a[l];
      return;
    }
    int m = (l + r) >> 1;
    build(l, m, rt << 1);
    build(m + 1, r, rt << 1 | 1);
    up(rt);
  }
  void update(int L, int R, int val, int l, int r, int rt) {
    if (L <= l && R >= r) {
      mx[rt] = mi[rt] = lazy[rt] = val;
      return;
    }
    int m = (l + r) >> 1;
    down(rt);
    if (L <= m) update(L, R, val, l, m, rt << 1);
    if (R > m) update(L, R, val, m + 1, r, rt << 1 | 1);
    up(rt);
  }
  int querymi(int p, int l, int r, int rt) {
    if (p == l && p == r) {
      return mi[rt];
    }
    int m = (l + r) >> 1;
    down(rt);
    if (p <= m)
      return querymi(p, l, m, rt << 1);
    else
      return querymi(p, m + 1, r, rt << 1 | 1);
  }
  int getright(int val, int L, int R, int l, int r, int rt) {
    if (mx[rt] < val) return -1;
    if (l == r) {
      return l;
    }
    int m = (l + r) >> 1;
    if (m < R && mx[rt << 1 | 1] >= val) {
      int x = getright(val, L, R, m + 1, r, rt << 1 | 1);
      if (x != -1) return x;
    }
    if (L <= m && mx[rt << 1] >= val) {
      int x = getright(val, L, R, l, m, rt << 1);
      if (x != -1) return x;
    }
    return -1;
  }
};
seg s1, s2;
int n, a[maxn];
int a2[maxn];
int main() {
  while (cin >> n) {
    for (int i = 1; i <= n; i++) {
      cin >> a[i];
    }
    int N = n * 3;
    for (int i = 1; i <= n; i++) a[i + n] = a[i], a[i + n * 2] = a[i];
    for (int i = 1; i <= N; i++) a2[i] = inf;
    s1.init(a, N);
    s2.init(a2, N);
    s1.build(1, N, 1);
    s2.build(1, N, 1);
    for (int i = N; i > 1; i--) {
      int val = a[i] * 2 + 1;
      int pos = s1.getright(val, 1, i, 1, N, 1);
      if (pos != -1) {
        s2.update(1, pos, i - 1, 1, N, 1);
      }
    }
    for (int i = 1; i <= n; i++) {
      int x = s2.querymi(i, 1, N, 1);
      if (x == inf)
        cout << -1 << " ";
      else
        cout << x - i + 1 << " ";
    }
    cout << endl;
  }
  return 0;
}
